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