ActionBarSherlockとアクションバーの互換性の違いは何ですか
数日前、Googleは私をとても混乱させるActionBar互換性をリリースしました。アクションバーの互換性はActionBarSherlockと同じように機能し、コーディングも同じですか?
例:「上」に移動するアプリアイコンまたはアクションバーの互換性でサポートされているActionBar.Tab?
ActionBarSherlockとアクションバーの互換性の違いは何ですか
数日前、Googleは私をとても混乱させるActionBar互換性をリリースしました。アクションバーの互換性はActionBarSherlockと同じように機能し、コーディングも同じですか?
例:「上」に移動するアプリアイコンまたはアクションバーの互換性でサポートされているActionBar.Tab?
ActionBarSherlock は、アプリが実行されている Android API のバージョンに関係なく*、アプリにアクション バーを提供します。アクション バーの互換性により、実行しているデバイスが API レベル 3.0 以上の場合にのみ、アクション バーが表示されます。
*実行しているデバイスが 3.0 以降でない場合、ActionBarSherlock はネイティブのものではなく、アクション バーの独自のカスタム実装を使用することに注意してください。
- 編集 -
状況が変わったようで、実際には ActionBarSherlock と Action Bar Compatibility の間に違いはありません。詳細については、以下のコメントをお読みください。
- 編集 -
今では両方を使用した後、私は実際には Action Bar Compatibility よりも ActionBarSherlock を好むと言えます。ActionBarSherlock は本当に簡単で使いやすいです。
--編集-- LOG_TAG が述べたように、Android サポート ライブラリでアクション バーがサポートされるようになりました。まだ使う機会はありませんが、これが一番使いやすいと思います。
実用的な例で@Kurtis Nusbaumを完成させるだけです。
更新: @rudy-s が言ったように、最新の Android サポート ライブラリ (api 18) では、アクションバー (ActionBarCompat クラスと呼ばれる) のサポートが既に組み込まれていることがわかりました。
ActionBarSherlock と ActionBar Compatibility の視覚的な違いを示すために、2 つの単純なアプリケーションを作成しました。比較画像を参照してください。
メニューボタンを押したときの外観:
ご覧のとおり、画像は言われたことを強制するだけです。アクション バーの互換性により、実行しているデバイスが 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) では、アクションバー (ActionBarCompat クラスと呼ばれる) のサポートが既に組み込まれていることがわかりました。
Actionbar Sherlock は、単純な Actionbar 互換プロジェクトよりもはるかに高度で野心的です。
アクション バーの互換性は、"サンプル" または、アプリの上にアクション バーを叩きたいだけの場合の良い出発点と見なすことができます。
ActionBarSherlock は互換性ライブラリに基づいて構築されており、(アクション バー互換性サンプルのように) 3.0 より前のデバイスでアクション バーを提供します。さらに、ActionBar Compat コードには存在しない追加機能があります。これには次のような機能が含まれますが、これらに限定されません
ActionbarSherlock を使用する際の唯一の欠点は、そのライブラリに閉じ込められることです。何らかの理由で近い将来に機能しなくなる場合は、自分で維持する必要があります (たとえば、Jellybean の実装がない場合)。すべてのフラグメントが SherlockFragemnt とすべてのアクティビティを拡張するため、これは面倒です (大きな問題ではありません)。シャーロック アクティビティ。
@Jakeの実装は、Actionbar compatよりもはるかに進んでいます。より正確には、Actionbar Compatは、Honeycomb(API 13)より前のリリースの疑似アクションバーですべてのアプリケーションをサポートする方法の基本的な例にすぎません。それらのターゲットは同じ相互互換性のあるアクションバーですが、アプローチは異なります。
ActionbarCompatアプローチ
この実装は、互換性Androidサポートライブラリを使用せず、代わりにActionBarActivityという基本クラスを作成します。このヘルパーは、APISの3つのセグメントの異なる実装を返すファクトリ自体として機能するヘルパーの単一インスタンスを作成します。
最も興味深い部分はActionbarBaseHelperにあります。これは最も重要なコードを持っているため、このクラスを理解し、例全体を取得することをお勧めします。
アクションバーシャーロック
ジェイクがこれをさらに説明できるかもしれないので、私は著者ではないので、これは最初はトリッキーですが、試してみます。
compat Sherlockが異なる実装を行うのと同じように、1つは「Compat」用で、もう1つはネイティブです。この2つの基本クラスにはActionBarをディスパッチするためのメソッドがあるため、SherlockActivityまたはSherlockFragmentActivityのいずれかから拡張する必要があります。
これは大規模で複雑なプロジェクトであり、1つの投稿で説明することはできません。Sherlock Githubリポジトリを掘り下げて見て、JeffAtwoodが言うように
ActionBarCompat
古いデバイスをサポートしたいすべての新しいプロジェクトに使用する必要があると強く信じています。
また、既存のプロジェクトを移行することも理にかなっています。ActionBarCompat をすぐに移行または使用する必要がある理由と、既存のプロジェクトを移行する方法を学びましょう。
ActionBarSherlock よりも ActionBarCompat を好む理由は何ですか?
ActionbarSherlock よりも ActionbarCompat を好む理由はたくさんあります。
まず第一に、このプロジェクトは Google によるものであり、サポート ライブラリの一部であるため、Google がストック Android でそれらをリリースすると同時に、新しいアクション バー関連のものをサポートする可能性があります。
もう 1 つの正当な理由は、Navigation Drawer
pattern
ActionBarSherlock はサポートしていませんが、すぐに使用できることです。したがって、このドロワーを既存のプロジェクト/アプリに追加する場合は、移行する必要があります。
最後に重要なのは、ActionBarSherlock の作成者である Jake Wharton が Google+ で、ActionBarSherlock のさらなる開発が中止されたことを発表したことです。ActionBarSherlock 4.4 は最後のリリースであり、バグ修正が行われる可能性がありますが、新機能はありません。そのため、actionbar に新しい機能が含まれている場合、actionbarsherlock ではそれに追いつけない可能性があります。
Google がAPI18以降の公式の Actionbar サポートを公開したため、回答を更新する必要があるのではないでしょうか?
以下のブロックは、これら 2 つのライブラリに関する公式ブログからのものです。
サードパーティのソリューション (ActionBarSherlock など) を使用している場合、アップグレードを検討する理由がいくつかあります。
- Action Bar API の進化に合わせて更新できます。
- 統合された祖先ナビゲーションのサポート。
- フレームワーク Menu および MenuItem クラスの使用。
- サポート ライブラリの Fragment クラスを引き続き使用します。
- DrawerLayout で使用するための ActionBarDrawerToggle の統合サポート。
- PopupMenu のバックポート。
ActionBarSherlock は、十分にテストされた堅牢なライブラリであり、長い間開発者に非常に役立ちました。すでに使用していて、現在上記のいずれも必要としない場合は、移行する必要はありません。