ActionBarSherlock 과 Action Bar 호환성 의 차이점은 무엇입니까
며칠 전 Google은 방금 혼란스러워하는 ActionBar 호환성을 발표했습니다. Action Bar 호환성이 ActionBarSherlock과 동일하게 작동하며 코딩이 동일합니까?
예 : 앱 아이콘이 "위로"탐색 하거나 ActionBar.Tab이 작업 표시 줄 호환성에서 지원됩니까?
ActionBarSherlock 과 Action Bar 호환성 의 차이점은 무엇입니까
며칠 전 Google은 방금 혼란스러워하는 ActionBar 호환성을 발표했습니다. Action Bar 호환성이 ActionBarSherlock과 동일하게 작동하며 코딩이 동일합니까?
예 : 앱 아이콘이 "위로"탐색 하거나 ActionBar.Tab이 작업 표시 줄 호환성에서 지원됩니까?
답변:
ActionBarSherlock은 앱이 실행되는 Android API 버전에 상관없이 애플리케이션에 작업 표시 줄을 제공합니다. 작업 표시 줄 호환성은 실행중인 장치가 API 레벨 3.0 이상인 경우에만 작업 표시 줄을 제공합니다.
* 실행중인 장치가 3.0 이상이 아닌 경우 ActionBarSherlock은 기본 장치가 아닌 자체 조치 막대의 사용자 정의 구현을 사용합니다.
--편집하다--
변경 사항이있는 것으로 보이며 실제로 ActionBarSherlock과 작업 표시 줄 호환성간에 차이가 없습니다. 자세한 내용은 아래 주석을 읽으십시오.
--편집하다--
지금 두 가지를 모두 사용한 후에는 ActionBarSherlock과 Action Bar 호환성을 실제로 선호한다고 말할 수 있습니다. ActionBarSherlock은 정말 쉽고 사용하기 쉽습니다.
--EDIT-- LOG_TAG에서 언급했듯이 이제 Android 지원 라이브러리에 작업 표시 줄이 지원됩니다. 나는 아직 그것을 사용할 기회가 없었지만, 그것이 최선의 방법이라고 상상할 것입니다.
ActionBarSherlock vs ActionBarCompat :
방금 ActionBarSherlock과 ActionBarCompat Lib 사이에 약간의 코드 차이를 넣고 싶습니다.
ActionBarSherlock에서 ActionBarCompat으로 일부 앱을 마이그레이션 할 수 있습니다.
단계 :
AppCompat 프로젝트를 가져 옵니다 .
교체 SherlockFragmentActivity
와 함께 ActionBarActivity
.
교체 SherlockFragment
와 함께 Fragment
.
변경 Menu
, MenuItem
및 getSupportMenuInflater()
참조. 액션 뷰를 얻는 방법을 수정하십시오.
mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)
자세한 내용은 + NickButcher (Google) 의이 슬라이드를 참조하십시오.
출처 덕분에 : http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/
ABC에 대한 자세한 내용은 이 개발자 를 읽는 것을 잊지 마십시오 !
참고 : 불행히도 지원 라이브러리로는 ABS를 사용할 수없는 것과 동일한 방식으로 단위 테스트를 위해 설정합니다.
산출:
크레딧 : Gabriele Mariotti
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
할 수 있으며 라이브러리 프로젝트 일 필요는 없습니다.
@Kurtis Nusbaum을 실제 사례로 완성하기 만하면됩니다.
업데이트 : @ rudy-s가 말했듯이 최신 Android 지원 라이브러리 (api 18)와 함께 actionbar (ActionBarCompat 클래스라고 함)가 이미 내장되어 있음을 알았습니다.
ActionBarSherlock과 ActionBar 호환성의 시각적 차이를 보여주기 위해 두 가지 간단한 응용 프로그램을 만들었습니다. 비교 이미지를 참조하십시오.
이제 메뉴 버튼을 눌렀을 때의 모습 :
보시다시피, 이미지는 말한 것을 강제합니다. 작업 표시 줄 호환성은 실행중인 장치가 API 레벨 3.0 이상인 경우에만 작업 표시 줄을 제공합니다. 셜록이 더 일반적이지만.
아래에서 응용 프로그램 소스를 볼 수 있습니다.
메뉴 xml 파일은 동일합니다.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_1"
android:orderInCategory="100"
android:showAsAction="always"
android:title="@string/action1"/>
<item
android:id="@+id/action_2"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action2"/>
<item
android:id="@+id/action_3"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="@string/action3"/>
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
호환성 활동 :
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
셜록의 활동 :
public class MainActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
}
sherlock 앱에서 추가 구성이 필요했습니다.
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
업데이트 : @ rudy-s가 말했듯이 최신 Android 지원 라이브러리 (api 18)와 함께 actionbar (ActionBarCompat 클래스라고 함)가 이미 내장되어 있음을 알았습니다.
Actionbar Sherlock은 단순한 Actionbar 호환성 프로젝트보다 훨씬 발전하고 야심적입니다.
앱 상단에 작업 표시 줄 만 표시하려는 경우 작업 표시 줄 호환성은 "샘플"또는 좋은 시작점으로 간주 될 수 있습니다.
ActionBarSherlock은 호환성 라이브러리를 기반으로하며 3.0 이전 장치의 작업 표시 줄 (예 : 작업 표시 줄 호환성 샘플)을 제공합니다. 또한 ActionBar Compat 코드에는없는 추가 기능이 있습니다. 여기에는 다음과 같은 기능이 포함되지만 이에 국한되지는 않습니다.
ActionbarSherlock 사용시 유일한 단점은 해당 라이브러리에 자신을 고정시키는 것입니다. 어떤 이유로 가까운 시일 내에 사망 할 경우 자체 유지해야합니다 (예 : Jellybean 구현이없는 경우). 모든 조각이 SherlockFragemnt 및 모든 활동을 확장하므로 번거롭지 않습니다 (큰 문제는 아닙니다). SherlockActivity.
잘 @Jake 구현은 Actionbar compat보다 더 나아갑니다. Actionbar Compat은 Honeycomb (API 13) 이전 릴리스의 의사 동작 막대로 모든 응용 프로그램을 지원하는 방법에 대한 기본적인 예입니다. 그들의 목표는 동일한 상호 호환 가능한 작업 표시 줄이지 만 다른 접근 방식이 있습니다.
Compat Aproach
이 구현은 호환성 Android 지원 라이브러리를 사용하지 않고 대신 ActionBarActivity 라는 기본 클래스를 작성합니다. 이 헬퍼는 APIS의 세 가지 세그먼트에 대해 다른 구현을 리턴하는 팩토리 자체로 작동 하는 헬퍼 의 단일 인스턴스를 작성 합니다.
가장 흥미로운 부분은 ActionbarBaseHelper입니다 . 가장 중요한 코드가 있기 때문에이 클래스를 이해하면 전체 예제를 얻을 수 있습니다.
액션 바 셜록
글쎄, 필자는 제이크가 더 자세히 설명 할 수는 없지만 저자가 아니기 때문에 시도하기가 쉽지 않기 때문에 까다로울 수 있습니다.
셜록이 다른 구현을하는 것처럼 하나는 "컴 파트"를위한 것이고 다른 하나는 네이티브입니다. 이 두 기본 클래스에는 ActionBar를 전달하는 메소드가 있으므로 SherlockActivity 또는 SherlockFragmentActivity에서 확장하도록 강제합니다.
이 프로젝트는 크고 복잡한 프로젝트이므로 단일 게시물로 설명 할 수 없습니다. Jeff Atwood의 말 처럼 Sherlock Github 저장소를 둘러 보라고 제안하십시오.
ActionBarCompat
구형 장치를 지원하려는 모든 새 프로젝트에 사용해야한다고 생각 합니다.
기존 프로젝트를 마이그레이션하는 것이 좋습니다. 따라서 ActionBarCompat를 마이그레이션하거나 사용해야하는 이유와 기존 프로젝트를 마이그레이션하는 방법을 계속 읽으십시오.
ActionBarSherlock보다 ActionBarCompat를 선호해야하는 이유는 무엇입니까?
ActionbarSherlock보다 ActionbarCompat를 선호하는 데는 여러 가지 이유가 있습니다.
이 프로젝트의 첫 번째는 Google에 의한 것이며, 지원 라이브러리의 일부이므로 Google이 스톡 Android로 릴리스 할 때 새로운 Action Bar 관련 항목을 지원할 가능성이 높습니다.
또 다른 좋은 이유는 Navigation Drawer
pattern
ActionBarSherlock이 지원하지 않는 즉시 지원하는 것입니다. 따라서이 드로어를 기존 프로젝트 / 앱에 추가하려면 마이그레이션해야합니다.
마지막으로 중요한 것은 ActionBarSherlock의 제작자 인 Jake Wharton이 Google+에서 ActionBarSherlock의 추가 개발이 중단되었다고 발표 한 것입니다. ActionBarSherlock 4.4는 마지막 릴리스이며 버그 수정이있을 수 있지만 새로운 기능은 제공되지 않습니다. 따라서 새로운 기능이 작업 표시 줄에 포함되어 있으면 actionbarsherlock을 사용하지 않을 수 있습니다.
Google은 API18 이후 공식적인 액션 바 지원을 게시했기 때문에 답변을 업데이트해야 할까요 ?
아래 블록 은이 두 라이브러리에 대한 공식 블로그입니다 .
타사 솔루션 (예 : ActionBarSherlock)을 사용하는 경우 업그레이드를 고려해야하는 몇 가지 이유가 있습니다.
- Action Bar API가 발전함에 따라 업데이트 상태를 유지할 수 있습니다.
- 통합 조상 내비게이션 지원.
- 프레임 워크 Menu 및 MenuItem 클래스 사용
- 지원 라이브러리의 Fragment 클래스를 계속 사용하십시오.
- DrawerLayout과 함께 사용하기위한 ActionBarDrawerToggle에 대한 통합 지원.
- PopupMenu의 백 포트.
ActionBarSherlock은 견고하고 테스트를 거친 라이브러리로 개발자에게 오랜 시간 동안 훌륭한 서비스를 제공해 왔습니다. 이미 사용 중이고 현재 위의 항목이 필요하지 않은 경우 마이그레이션 할 필요가 없습니다.