ActionBarSherlock과 ActionBar 호환성의 차이점
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)를 사용하면 액션 바 (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>
Compatibility's activity:
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;
}
}
Sherlock's activity:
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);
}
}
An additional config was necessary on sherlock app:
<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">
UPDATE: as @rudy-s said, with newest android support library (api 18), I saw they already have built-in support for actionbar (called ActionBarCompat class).
Actionbar Sherlock is far more advanced and far more ambitious than the simple Actionbar compatibility project.
The Action bar compatibility can be considered a "sample" or a good starting point if you only want to smack an Action Bar on top of your app.
ActionBarSherlock builds on the compatibility library, and gives you (like the action bar compatibility sample) an Action Bar on pre-3.0 devices. In addition it has extra features not present in the ActionBar Compat code. This includes features like, but not limited to
- setNavigationMode (for Tabs and spinners in the action bar)
- Dialog Fragments
- Contextual Action Bar (CAB) a menu that takes over the action bar, used for example for multi select (http://developer.android.com/design/patterns/new-4-0.html) This is a ICS feature (!) For this, an implementation of the ActionMode class (introduced in API level 11) had to be introduced into the ActionbarSherlock library
- Fragment and FragmentActivity implementations - because fragments can implement the onCreateOptions menu, we need to make sure that the SupportMenuInflater is used.
- Two themes not very unlike Holo.Dark and Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
- The ICS feature "split action bar"
The only downside I see in using ActionbarSherlock is that you lock yourself in to that library. If for some reason it will die out in the near future, you'll have to maintain it youself (for example if no Jellybean implementation comes along). This is a hassle (not a huge problem) since all your fragments extends SherlockFragemnt and all your Activities. SherlockActivity.
Well @Jake implementation goes way further than what the Actionbar compat, to be more precise Actionbar Compat is just a basic example on how can you support all aplication with a pseudo-actionbar for releases prior from Honeycomb (API 13). Although their target is the same cross compatible actionbar, they have diferent approach.
ActionbarCompat Aproach
This implementation make no use of the Compatibility Android support library instead it create a base class called ActionBarActivity create a single instance of a Helper this helper act as factory itself that returns diferent implementation for the three segment of APIS, it returns
- ActionbarBaseHelper: for prior to HoneyComb.
- ActionBarHoneyComb: for HoneyComb
- ActionBarHelperICS: for ICS base devices.
The most interesting part is in the ActionbarBaseHelper, because it has the most important code, I suggest you understand this class and you will get the whole example.
Action Bar Sherlock
Well this is tricky firstable because, I'm not the author maybe Jake can explained further this, but I'll give it a try.
Just as the compat Sherlock make diferent implementation but one is for "Compat" and the other is Native. It force you to extends either from SherlockActivity or from SherlockFragmentActivity, because this two base classes have the method for dispatching the ActionBar.
This is a large and complex project, that cannot be explained in a single post. Suggest you dig around Sherlock Github repo grab a look and as Jeff Atwood says
I strongly believe that you should use
ActionBarCompat
for all new projects that want to support older devices.It also might make sense to migrate existing projects. So read on to learn why you should migrate or use ActionBarCompat right away and how to migrate existing projects.
Why you should prefer ActionBarCompat over ActionBarSherlock?
There are many reasons why you should prefer ActionbarCompat over ActionbarSherlock.
First of all this project is by Google, is part of the Support Library and thus likely will support new Action Bar related stuff at the same time Google releases them with stock Android.
Another good reason is that it supports the
Navigation Drawer pattern
right out of the box, while ActionBarSherlock does not. Thus if you want to add this drawer to an existing project/app you should migrate.The last and Important is, that the creator of ActionBarSherlock, Jake Wharton, announced on Google+ that further development of ActionBarSherlock has been stopped. ActionBarSherlock 4.4 is the last release and might get bug fixes – but there won’t be any new features: So if new functionality is included in actionbar you may not keep up to it with actionbarsherlock.
Maybe we should update the answer because google published offical Actionbar support since API18?
block below is from offical blog about these two libraries:
If you’re using a third-party solution (such as ActionBarSherlock), there are a few reasons to consider upgrading:
- Can be kept updated as the Action Bar API evolves.
- Integrated Ancestral Navigation support.
- Use of framework Menu and MenuItem classes.
- 지원 라이브러리의 Fragment 클래스를 계속 사용하십시오.
- DrawerLayout과 함께 사용하기위한 ActionBarDrawerToggle에 대한 통합 지원.
- PopupMenu의 백 포트.
ActionBarSherlock은 강력하고 테스트를 거친 라이브러리로 개발자에게 오랜 시간 동안 훌륭한 서비스를 제공해 왔습니다. 이미 사용 중이고 현재 위의 요구 사항이없는 경우 마이그레이션 할 필요가 없습니다.
'Programing' 카테고리의 다른 글
에 배경 이미지 추가 (0) | 2020.06.07 |
---|---|
MVVM에서 ViewModel 또는 Model이 INotifyPropertyChanged를 구현해야합니까? (0) | 2020.06.07 |
힙 대 이진 검색 트리 (BST) (0) | 2020.06.07 |
Fragment와 FragmentActivity의 차이점은 무엇입니까? (0) | 2020.06.07 |
원본을 참조하면서 JavaScript 함수 재정의 (0) | 2020.06.07 |