[java] ActionBarSherlock과 ActionBar 호환성의 차이점

ActionBarSherlockAction 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 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


답변

@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입니다 . 가장 중요한 코드가 있기 때문에이 클래스를 이해하면 전체 예제를 얻을 수 있습니다.

액션 바 셜록

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

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

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

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


답변

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

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

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

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

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

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

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


답변

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

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

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

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

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