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
답변
@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 코드에는없는 추가 기능이 있습니다. 여기에는 다음과 같은 기능이 포함되지만 이에 국한되지는 않습니다.
- setNavigationMode (작업 표시 줄의 탭 및 스피너)
- 대화 조각
- 상황 별 작업 표시 줄 (CAB)은 예를 들어 다중 선택에 사용되는 작업 표시 줄을 대신하는 메뉴입니다 (http://developer.android.com/design/patterns/new-4-0.html) 이것은 ICS 기능입니다 ( !)이를 위해 ActionMode 클래스 (API 레벨 11에서 도입)를 ActionbarSherlock 라이브러리에 도입해야했습니다.
- Fragment 및 FragmentActivity 구현-프래그먼트가 onCreateOptions 메뉴를 구현할 수 있으므로 SupportMenuInflater가 사용되는지 확인해야합니다.
- Holo.Dark 및 Holo.Light와 크게 다르지 않은 두 가지 테마 (Theme.Sherlock, Theme.Sherlock.Light)
- ICS 기능 “분할 작업 표시 줄”
ActionbarSherlock 사용시 유일한 단점은 해당 라이브러리에 자신을 고정시키는 것입니다. 어떤 이유로 가까운 시일 내에 사망 할 경우 자체 유지해야합니다 (예 : Jellybean 구현이없는 경우). 모든 조각이 SherlockFragemnt 및 모든 활동을 확장하므로 번거롭지 않습니다 (큰 문제는 아닙니다). SherlockActivity.
답변
잘 @Jake 구현은 Actionbar compat보다 더 나아갑니다. Actionbar Compat은 Honeycomb (API 13) 이전 릴리스의 의사 동작 막대로 모든 응용 프로그램을 지원하는 방법에 대한 기본적인 예입니다. 그들의 목표는 동일한 상호 호환 가능한 작업 표시 줄이지 만 다른 접근 방식이 있습니다.
Compat Aproach
이 구현은 호환성 Android 지원 라이브러리를 사용하지 않고 대신 ActionBarActivity 라는 기본 클래스를 작성합니다. 이 헬퍼는 APIS의 세 가지 세그먼트에 대해 다른 구현을 리턴하는 팩토리 자체로 작동 하는 헬퍼 의 단일 인스턴스를 작성 합니다.
- ActionbarBaseHelper : HoneyComb 이전.
- ActionBarHoneyComb : 허니컴 용
- ActionBarHelperICS : ICS 기본 장치 용.
가장 흥미로운 부분은 ActionbarBaseHelper입니다 . 가장 중요한 코드가 있기 때문에이 클래스를 이해하면 전체 예제를 얻을 수 있습니다.
액션 바 셜록
글쎄, 필자는 제이크가 더 자세히 설명 할 수는 없지만 저자가 아니기 때문에 시도하기가 쉽지 않기 때문에 까다로울 수 있습니다.
셜록이 다른 구현을하는 것처럼 하나는 “컴 파트”를위한 것이고 다른 하나는 네이티브입니다. 이 두 기본 클래스에는 ActionBar를 전달하는 메소드가 있으므로 SherlockActivity 또는 SherlockFragmentActivity에서 확장하도록 강제합니다.
이 프로젝트는 크고 복잡한 프로젝트이므로 단일 게시물로 설명 할 수 없습니다. Jeff Atwood의 말 처럼 Sherlock Github 저장소를 둘러 보라고 제안하십시오.
답변
-
ActionBarCompat
구형 장치를 지원하려는 모든 새 프로젝트에 사용해야한다고 생각 합니다. -
기존 프로젝트를 마이그레이션하는 것이 좋습니다. 따라서 ActionBarCompat를 마이그레이션하거나 사용해야하는 이유와 기존 프로젝트를 마이그레이션하는 방법을 계속 읽으십시오.
ActionBarSherlock보다 ActionBarCompat를 선호해야하는 이유는 무엇입니까?
ActionbarSherlock보다 ActionbarCompat를 선호하는 데는 여러 가지 이유가 있습니다.
-
이 프로젝트의 첫 번째는 Google에 의한 것이며, 지원 라이브러리의 일부이므로 Google이 스톡 Android로 릴리스 할 때 새로운 Action Bar 관련 항목을 지원할 가능성이 높습니다.
-
또 다른 좋은 이유는
Navigation Drawer
ActionBarSherlock이 지원하지 않는 즉시 지원하는 것입니다. 따라서이 드로어를 기존 프로젝트 / 앱에 추가하려면 마이그레이션해야합니다.
pattern -
마지막으로 중요한 것은 ActionBarSherlock의 제작자 인 Jake Wharton이 Google+에서 ActionBarSherlock의 추가 개발이 중단되었다고 발표 한 것입니다. ActionBarSherlock 4.4는 마지막 릴리스이며 버그 수정이있을 수 있지만 새로운 기능은 제공되지 않습니다. 따라서 새로운 기능이 작업 표시 줄에 포함되어 있으면 actionbarsherlock을 사용하지 않을 수 있습니다.
답변
Google은 API18 이후 공식적인 액션 바 지원을 게시했기 때문에 답변을 업데이트해야 할까요 ?
아래 블록 은이 두 라이브러리에 대한 공식 블로그입니다 .
타사 솔루션 (예 : ActionBarSherlock)을 사용하는 경우 업그레이드를 고려해야하는 몇 가지 이유가 있습니다.
- Action Bar API가 발전함에 따라 업데이트 상태를 유지할 수 있습니다.
- 통합 조상 내비게이션 지원.
- 프레임 워크 Menu 및 MenuItem 클래스 사용
- 지원 라이브러리의 Fragment 클래스를 계속 사용하십시오.
- DrawerLayout과 함께 사용하기위한 ActionBarDrawerToggle에 대한 통합 지원.
- PopupMenu의 백 포트.
ActionBarSherlock은 견고하고 테스트를 거친 라이브러리로 개발자에게 오랜 시간 동안 훌륭한 서비스를 제공해 왔습니다. 이미 사용 중이고 현재 위의 항목이 필요하지 않은 경우 마이그레이션 할 필요가 없습니다.