ActionBarSherlock과 ActionBar 호환성의 차이점


156

ActionBarSherlockAction Bar 호환성 의 차이점은 무엇입니까

며칠 전 Google은 방금 혼란스러워하는 ActionBar 호환성을 발표했습니다. Action Bar 호환성이 ActionBarSherlock과 동일하게 작동하며 코딩이 동일합니까?

예 : 앱 아이콘이 "위로"탐색 하거나 ActionBar.Tab이 작업 표시 줄 호환성에서 지원됩니까?


12
참고로 Square의 eng 블로그에 대한 블로그 게시물을 작성했습니다. corner.squareup.com/2012/05/actionbarsherlock-as-a-base.html
Jake Wharton

3
youtube.com/… Google이 ActionBarSherlock과 ActionBarCompact를 비교 한 결과
Rolf ツ

이것은 ABS에서 ABCompat으로 마이그레이션하려는 사람들에게 중요하고 유용한 스레드입니다. 감사.
Ashokchakravarthi Nagarajan

답변:


61

ActionBarSherlock은 앱이 실행되는 Android API 버전에 상관없이 애플리케이션에 작업 표시 줄을 제공합니다. 작업 표시 줄 호환성은 실행중인 장치가 API 레벨 3.0 이상인 경우에만 작업 표시 줄을 제공합니다.

* 실행중인 장치가 3.0 이상이 아닌 경우 ActionBarSherlock은 기본 장치가 아닌 자체 조치 막대의 사용자 정의 구현을 사용합니다.

--편집하다--

변경 사항이있는 것으로 보이며 실제로 ActionBarSherlock과 작업 표시 줄 호환성간에 차이가 없습니다. 자세한 내용은 아래 주석을 읽으십시오.

--편집하다--

지금 두 가지를 모두 사용한 후에는 ActionBarSherlock과 Action Bar 호환성을 실제로 선호한다고 말할 수 있습니다. ActionBarSherlock은 정말 쉽고 사용하기 쉽습니다.

--EDIT-- LOG_TAG에서 언급했듯이 이제 Android 지원 라이브러리에 작업 표시 줄이 지원됩니다. 나는 아직 그것을 사용할 기회가 없었지만, 그것이 최선의 방법이라고 상상할 것입니다.


1
@Anidamo 감사합니다. 나는 미쳤을지도 모르지만, 한 번에 안드로이드 호환 팩의 버전이 3.0 이전의 버전을 제공하지 않았다고 맹세 할 수 있습니다. 내 답변을 수정했습니다.
커티스 Nusbaum

35
또한 대답은 완전히 틀립니다. 호환성 예제의 목적은 3.0 이전 장치를 지원하는 것입니다.
AlikElzin-kilaka

8
Google은 Support Library r18의 일부인 ActionBarCompat이라는 새로운 이전 버전과 호환되는 Action Bar 구현을 발표했습니다. ActionBarCompat API를 사용하면 Android 2.1과의 광범위한 호환성으로 앱에 필수 Action Bar 디자인 패턴을 빌드 할 수 있습니다.
LOG_TAG

3
링크를하면 알 수 whyhow새로운 ActionBarCompat API를 사용하기를 android-developers.blogspot.in/2013/08/...

2
앱에 Chromecast 통합을 원한다고 생각하는 사람들을 위해 appcompat 라이브러리를 사용하는 것이 좋습니다. Chromecast 통합에 필요한 MediaRouter API는 appcompat에 따라 다릅니다. ActionBarSherlock을 사용할 수 없습니다.
clu

113

ActionBarSherlock vs ActionBarCompat :

방금 ActionBarSherlock과 ActionBarCompat Lib 사이에 약간의 코드 차이를 넣고 싶습니다.

 ActionBarSherlock vs ActionBarCompat ** 강력한 텍스트 **

ActionBarSherlock에서 ActionBarCompat으로 일부 앱을 마이그레이션 할 수 있습니다.

단계 :

  1. AppCompat 프로젝트를 가져 옵니다 .

  2. 교체 SherlockFragmentActivity와 함께 ActionBarActivity.

  3. 교체 SherlockFragment와 함께 Fragment.

  4. 변경 Menu, MenuItemgetSupportMenuInflater()참조. 액션 뷰를 얻는 방법을 수정하십시오.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. 테마스타일을 수정하십시오 .

자세한 내용은 + NickButcher (Google) 의이 슬라이드를 참조하십시오.

여기에 이미지 설명을 입력하십시오

출처 덕분에 : http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

ABC에 대한 자세한 내용은 이 개발자 를 읽는 것을 잊지 마십시오 !

참고 : 불행히도 지원 라이브러리로는 ABS를 사용할 수없는 것과 동일한 방식으로 단위 테스트를 위해 설정합니다.

산출:

여기에 이미지 설명을 입력하십시오

크레딧 : Gabriele Mariotti


1
ABS를 이제 Gradle 프로젝트에 추가 compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'할 수 있으며 라이브러리 프로젝트 일 필요는 없습니다.
ankushg 2018 년

자세한 설명에 감사드립니다
Biswajit Das

41

@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 클래스라고 함)가 이미 내장되어 있음을 알았습니다.


5
실제로 이것은 완전히 정확하지 않습니다. Compat 라이브러리는 Gingerbread에서 ActionBar 구현을 제공 할 수 있습니다. 예를 들어이 응용 프로그램은 GB에 AB를 제공하며 Sherlock을 사용하지 않고 Compat을 사용합니다. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid

그 actionbarcompat 샘플을 꺼내서 (예 : android-17 sdk에서) ADT로 빌드하면 ActionBar가있는 GB 장치에서 실행될 것입니다. 방금 2.3.5의 Desire HD를 확인하기 위해 직접 테스트했습니다.
Hamid

알았어 그러나 ActionBarSherlock은 더 많은 기능을 제공합니까?
Bruno Mateus

2
최신 안드로이드 지원 라이브러리 (api 18)를 사용하면 이미 액션 바 (ActionBarCompat 클래스라고 함)가 기본적으로 지원됩니다.
rudy s

생강 비어? 그것을 사랑하십시오.
Carlos P

39

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.


뭔가 빠졌습니까? 다중 선택은 ABS에서 지원되지 않는 것 같습니다
jiduvah

1
지연 돼서 죄송합니다. 다중 선택은 자체적으로 ABS에 의해 지원되지 않습니다. 그러나 ABS에는 자체 ActionMode 클래스 구현이 있으므로 ABS "ActionMode"를 사용하여 Multiselect를 구현할 수 있습니다. "멀티 선택 모드"로 들어가면 ListView의 선택 모드를 CHOICE_MODE_MULTIPLE로 설정하고 getSherlockActivity (). startActionMode (callback)를 호출하여 ActionMode를 호출합니다.
Glenn Bech

26

잘 @Jake 구현은 Actionbar compat보다 더 나아갑니다. Actionbar Compat은 Honeycomb (API 13) 이전 릴리스의 의사 동작 막대로 모든 응용 프로그램을 지원하는 방법에 대한 기본적인 예입니다. 그들의 목표는 동일한 상호 호환 가능한 작업 표시 줄이지 만 다른 접근 방식이 있습니다.

Compat Aproach

이 구현은 호환성 Android 지원 라이브러리를 사용하지 않고 대신 ActionBarActivity 라는 기본 클래스를 작성합니다. 이 헬퍼는 APIS의 세 가지 세그먼트에 대해 다른 구현을 리턴하는 팩토리 자체로 작동 하는 헬퍼 의 단일 인스턴스를 작성 합니다.

가장 흥미로운 부분은 ActionbarBaseHelper입니다 . 가장 중요한 코드가 있기 때문에이 클래스를 이해하면 전체 예제를 얻을 수 있습니다.

액션 바 셜록

글쎄, 필자는 제이크가 더 자세히 설명 할 수는 없지만 저자가 아니기 때문에 시도하기가 쉽지 않기 때문에 까다로울 수 있습니다.

셜록이 다른 구현을하는 것처럼 하나는 "컴 파트"를위한 것이고 다른 하나는 네이티브입니다. 이 두 기본 클래스에는 ActionBar를 전달하는 메소드가 있으므로 SherlockActivity 또는 SherlockFragmentActivity에서 확장하도록 강제합니다.

이 프로젝트는 크고 복잡한 프로젝트이므로 단일 게시물로 설명 할 수 없습니다. Jeff Atwood의 말 처럼 Sherlock Github 저장소를 둘러 보라고 제안하십시오.

여기에 이미지 설명을 입력하십시오


10
  • ActionBarCompat구형 장치를 지원하려는 모든 새 프로젝트에 사용해야한다고 생각 합니다.

  • 기존 프로젝트를 마이그레이션하는 것이 좋습니다. 따라서 ActionBarCompat를 마이그레이션하거나 사용해야하는 이유와 기존 프로젝트를 마이그레이션하는 방법을 계속 읽으십시오.

ActionBarSherlock보다 ActionBarCompat를 선호해야하는 이유는 무엇입니까?

ActionbarSherlock보다 ActionbarCompat를 선호하는 데는 여러 가지 이유가 있습니다.

  1. 이 프로젝트의 첫 번째는 Google에 의한 것이며, 지원 라이브러리의 일부이므로 Google이 스톡 Android로 릴리스 할 때 새로운 Action Bar 관련 항목을 지원할 가능성이 높습니다.

  2. 또 다른 좋은 이유는 Navigation Drawer patternActionBarSherlock이 지원하지 않는 즉시 지원하는 것입니다. 따라서이 드로어를 기존 프로젝트 / 앱에 추가하려면 마이그레이션해야합니다.

  3. 마지막으로 중요한 것은 ActionBarSherlock의 제작자 인 Jake Wharton이 Google+에서 ActionBarSherlock의 추가 개발이 중단되었다고 발표 한 것입니다. ActionBarSherlock 4.4는 마지막 릴리스이며 버그 수정이있을 수 있지만 새로운 기능은 제공되지 않습니다. 따라서 새로운 기능이 작업 표시 줄에 포함되어 있으면 actionbarsherlock을 사용하지 않을 수 있습니다.


7

Google은 API18 이후 공식적인 액션 바 지원을 게시했기 때문에 답변을 업데이트해야 할까요 ?

아래 블록 은이 두 라이브러리에 대한 공식 블로그입니다 .

타사 솔루션 (예 : ActionBarSherlock)을 사용하는 경우 업그레이드를 고려해야하는 몇 가지 이유가 있습니다.

  • Action Bar API가 발전함에 따라 업데이트 상태를 유지할 수 있습니다.
  • 통합 조상 내비게이션 지원.
  • 프레임 워크 Menu 및 MenuItem 클래스 사용
  • 지원 라이브러리의 Fragment 클래스를 계속 사용하십시오.
  • DrawerLayout과 함께 사용하기위한 ActionBarDrawerToggle에 대한 통합 지원.
  • PopupMenu의 백 포트.

ActionBarSherlock은 견고하고 테스트를 거친 라이브러리로 개발자에게 오랜 시간 동안 훌륭한 서비스를 제공해 왔습니다. 이미 사용 중이고 현재 위의 항목이 필요하지 않은 경우 마이그레이션 할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.