web-dev-qa-db-ja.com

ActionBarSherlockとActionBarの互換性の違い

ActionBarSherlockAction Bar Compatibility の違いは何ですか

数日前、GoogleはActionBar互換性をリリースしたばかりで、とても混乱しました。アクションバーの互換性はActionBarSherlockと同じように機能し、コーディングは同じですか?

例: 「アップ」をナビゲートするアプリアイコン またはActionBar.Tabはアクションバーの互換性でサポートされていますか?

154
xDragonZ

ActionBarSherlockは、アプリが実行されているAndroid AP​​Iのバージョンに関係なく、アプリケーションにアクションバーを提供します。アクションバーの互換性は、実行しているデバイスがAPIレベル3.0以上である場合にのみアクションバーを提供します。

*実行しているデバイスが3.0以上でない場合、ActionBarSherlockはネイティブではなく、独自のアクションバーのカスタム実装を使用することに注意してください。

-編集-

状況は変わったようで、実際にはActionBarSherlockとアクションバーの互換性に違いはありません。詳細については、以下のコメントをお読みください。

-編集-

両方を使用した後、Action Bar CompatibilityよりActionBarSherlockを実際に好むと言えます。 ActionBarSherlockは本当に簡単で使いやすいです。

--EDIT-- LOG_TAGが述べたように、Androidサポートライブラリでアクションバーがサポートされるようになりました。私はまだそれを使用する機会がありませんでしたが、私はそれが使用するのに最適なものだと思います。

61
Kurtis Nusbaum

ActionBarSherlock vs ActionBarCompat:

ActionBarSherlockとActionBarCompat Libのコードの違いはほとんどありません。

 ActionBarSherlock vs ActionBarCompat **strong text**

一部のアプリをActionBarSherlockからActionBarCompatに移行できます:

手順:

  1. インポートAppCompatプロジェクト。

  2. SherlockFragmentActivityActionBarActivityに置き換えます。

  3. SherlockFragmentFragmentに置き換えます。

  4. MenuMenuItemおよびgetSupportMenuInflater()参照を変更します。アクションビューの取得方法を変更します。

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. ThemesおよびStylesを変更します。

詳細については、このスライドを参照してください + NickButcher (Google)

enter image description here

ソースに感謝: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.htmlhttp://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

これを読むことを忘れないでください developer.Android ABCの詳細について!

注:残念ながら、サポートライブラリでは、ABSと同じ方法で単体テスト用に設定することはできません。

出力:

enter image description here

クレジット:Gabriele Mariotti

113
LOG_TAG

実際の例で@Kurtis Nusbaumを完成させるだけです。

更新:@ rudy-sが言ったように、最新のAndroidサポートライブラリ(api 18)で、アクションバー(ActionBarCompatクラスと呼ばれる)のサポートが既に組み込まれていることがわかりました。

ActionBarSherlockとActionBarの互換性の視覚的な違いを示すために、2つの簡単なアプリケーションを作成しました。比較画像を参照してください。

App using compatibility library

App using sherlock library

メニューボタンを押したときの外観:

App using compatibility on menu pressed

App using sherlock on menu pressed


ご覧のとおり、画像は言われたことを強制するだけです。 実行しているデバイスがAPIレベル3.0以上である場合にのみ、アクションバーの互換性によりアクションバーが提供されます。Sherlockはより一般的です。

以下に、アプリケーションのソースを見ることができます。

メニュー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クラスと呼ばれる)のサポートが既に組み込まれていることがわかりました。

41
Bruno Mateus

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ライブラリに導入する必要がありました。
  • フラグメントとFragmentActivityの実装-フラグメントはonCreateOptionsメニューを実装できるため、SupportMenuInflaterが使用されていることを確認する必要があります。
  • Holo.DarkとHolo.Lightにあまり似ていない2つのテーマ(Theme.Sherlock、Theme.Sherlock.Light)
  • ICS機能「アクションバーの分割」

ActionbarSherlockを使用する際の唯一の欠点は、そのライブラリにロックインすることです。何らかの理由で近い将来に消滅する場合は、自分で保守する必要があります(たとえば、Jellybeanの実装がない場合)。すべてのフラグメントがSherlockFragemntおよびすべてのアクティビティを拡張するため、これは面倒です(大きな問題ではありません)。 SherlockActivity。

39
Glenn Bech

@Jakeの実装は、Actionbarコンパットよりもさらに進んでいます。より正確には、Actionbar Compatは、Honeycomb(API 13)より前のリリースの疑似アクションバーですべてのアプリケーションをサポートする方法の基本的な例にすぎません。彼らのターゲットは同じ互換性のあるアクションバーですが、アプローチは異なります。

ActionbarCompat Aproach

この実装は、互換性Androidサポートライブラリを使用せず、代わりに ActionBarActivity という単一のインスタンスを作成します Helper このヘルパーはAPISの3つのセグメントの異なる実装を返すファクトリー自体、

最も興味深い部分は ActionbarBaseHelper にあります。最も重要なコードがあるため、このクラスを理解することをお勧めします。サンプル全体を入手してください。

アクションバーシャーロック

私は作者ではないので、ジェイクはこれをさらに説明できるかもしれませんが、試してみます。

互換性のあるSherlockが異なる実装を行うように、1つは「Compat」用で、​​もう1つはネイティブです。この2つの基本クラスにはActionBarをディスパッチするメソッドがあるため、SherlockActivityまたはSherlockFragmentActivityから拡張するように強制します。

これは大規模で複雑なプロジェクトであり、単一の投稿で説明することはできません。 Sherlock Github repo を見て、 Jeff Atwood が言うように

enter image description here

26
Necronet
  • 古いデバイスをサポートしたいすべての新しいプロジェクトにActionBarCompatを使用すべきだと強く信じています。

  • また、既存のプロジェクトを移行することも意味があります。そのため、ActionBarCompatをすぐに移行または使用する理由と、既存のプロジェクトを移行する方法をお読みください。

なぜActionBarSherlockよりActionBarCompatを好むべきですか?

ActionbarSherlockよりもActionbarCompatを好む理由はたくさんあります。

  1. まず第一に、このプロジェクトはGoogleによるもので、サポートライブラリの一部であり、GoogleがストックAndroidでそれらをリリースすると同時に、新しいアクションバーに関連するものをサポートする可能性があります。

  2. もう1つの理由は、ActionBarSherlockがサポートしていないのに、すぐにNavigation Drawer patternをサポートすることです。したがって、この引き出しを既存のプロジェクト/アプリに追加する場合は、移行する必要があります。

  3. 最後の重要な点は、ActionBarSherlockの作成者であるJake Whartonが、Google +でActionBarSherlockのさらなる開発が中止されたことを発表したことです。 ActionBarSherlock 4.4は最後のリリースであり、バグが修正される可能性がありますが、新しい機能は追加されません。したがって、actionbarに新しい機能が含まれている場合、actionbarsherlockに対応できません。

10
Stephen

API18 ?以来、Googleは公式のActionbarサポートを公開したため、答えを更新する必要があります

以下のブロックは、これらの2つのライブラリについて 公式ブログ からのものです。

サードパーティのソリューション(ActionBarSherlockなど)を使用している場合、アップグレードを検討する理由がいくつかあります。

  • アクションバーAPIの進化に合わせて更新し続けることができます。
  • 統合された祖先ナビゲーションのサポート。
  • フレームワークのMenuクラスとMenuItemクラスの使用。
  • サポートライブラリのFragmentクラスを引き続き使用します。
  • DrawerLayoutで使用するためのActionBarDrawerToggleの統合サポート。
  • PopupMenuのバックポート。

ActionBarSherlockは、開発者に長い間役立ってきた堅実で十分にテストされたライブラリです。すでに使用していて、現在上記のいずれも必要としない場合、移行する必要はありません。

7
ruidge