ActionBarSherlockとActionBarの互換性の違い


156

ActionBarSherlockAction Barの互換性の違いは何ですか

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

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


12
ちなみに私は、Squareのengブログでこのことについてブログ投稿しました:corner.squareup.com/2012/05/actionbarsherlock-as-a-base.html
Jake Wharton

3
youtube.com/… これは、GoogleがActionBarSherlockとActionBarCompactを比較したものです
Rolfツセ

これは、ABSからABCompatに移行したい人にとって、重要で便利なスレッドです。ありがとう。
Ashokchakravarthi Nagarajan 2014

回答:


61

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

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

-編集-

状況が変わったように見え、実際にはActionBarSherlockとAction Barの互換性に違いはありません。詳細については、以下のコメントをお読みください。

-編集-

今両方を使用した後、私は実際にはアクションバーの互換性よりもActionBarSherlockを好むと言えます。ActionBarSherlockは本当に簡単で使いやすいです。

-編集-LOG_TAGで述べたように、Androidサポートライブラリでアクションバーがサポートされるようになりました。まだ使ったことがありませんが、これが一番いいと思います。


1
@アニダモ頭を上げてくれてありがとう。気が狂うかもしれませんが、ある時点で、Android互換性パックのバージョンでは3.0より前のバージョンが提供されていなかったと断言できます。回答を変更しました。
Kurtis Nusbaum

35
また、答えは完全に間違っています。互換性の例の目的は、3.0より前のデバイスをサポートすることです。
AlikElzin-kilaka 2012

8
Googleは、サポートライブラリr18の一部であるActionBarCompatと呼ばれる下位互換性のある新しいアクションバー実装をリリースしました。ActionBarCompat APIを使用すると、重要なアクションバーのデザインパターンをアプリに組み込むことができ、Android 2.1との幅広い互換性があります。
LOG_TAG 2013

3
次のリンクは、新しいActionBarCompat APIandroid-developers.blogspot.in/2013/08/…を使用することwhyを示しhowています
VenoM

2
補足すると、アプリにChromecastの統合が必要だと思われる場合は、appcompatライブラリを使用することを強くお勧めします。Chromecast統合に必要なMediaRouter APIはappcompatに依存します。ActionBarSherlockは使用できません。
clu 2013年

113

ActionBarSherlockとActionBarCompat:

ActionBarSherlockとActionBarCompat Libの間にコードの違いを少し入れたいだけです

 ActionBarSherlock vs ActionBarCompat **強いテキスト**

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

手順:

  1. AppCompatプロジェクトをインポートします。

  2. 交換してくださいSherlockFragmentActivityActionBarActivity

  3. 交換してくださいSherlockFragmentFragment

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

    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の詳細については、このdeveloper.androidをお読みください。

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

出力:

ここに画像の説明を入力してください

クレジット:Gabriele Mariotti


1
ABSがGradleプロジェクトに追加できるようになっただけの更新でcompile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'あり、ライブラリプロジェクトである必要はありません。
ankushg 2014年

詳細な説明をありがとう
Biswajit Das 2018

41

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


5
実際、これは完全に正しいわけではありません。Compatライブラリは、GingerbreadでのActionBar実装が可能であり、実際に提供します。たとえば、このアプリはGBのABを提供し、SherlockではなくCompatを使用します。play.google.com/store/apps/details?id=uk.co.mxdata.rootle
ハミド

そのactionbarcompatサンプルを引き出して(たとえば、android-17 sdkから)、ADTでビルドすると、ActionBarを備えたGBデバイスで実行されます。2.3.5のDesire HDで確認するために自分でテストしました。
Hamid

はい、分かりました。しかし、ActionBarSherlockはより多くの機能を提供しますね。
Bruno Mateus 2013年

2
最新のAndroidサポートライブラリ(API 18)を使用すると、アクションバー(ActionBarCompatクラスと呼ばれる)のサポートが既に組み込まれていることがわかりました。
rudy s 2013

GingerBEARD?大好きです。
Carlos P

39

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とそれほど変わらない2つのテーマ(Theme.Sherlock、Theme.Sherlock.Light)
  • ICS機能「スプリットアクションバー」

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


何か不足していますか?ABSではマルチセレクトがサポートされていないようです
jiduvah

1
遅れて申し訳ありません。複数選択は、それ自体ではABSによってサポートされていません。ただし、ABSにはActionModeクラスの独自の実装があるため、ABS "ActionMode"を使用して複数選択を実装できます。「複数選択モード」に入る場合、ListViewの選択モードをCHOICE_MODE_MULTIPLEに設定し、getSherlockActivity()。startActionMode(callback)を呼び出してActionModeを呼び出します
Glenn Bech

26

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

ActionbarCompat Aproach

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

最も興味深い部分はActionbarBaseHelperにあります。最も重要なコードが含まれているため、このクラスを理解すれば、全体の例が得られます。

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

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

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

これは大きくて複雑なプロジェクトであり、単一の投稿では説明できません。あなたは周りを掘る提案シャーロックGitHubのレポグラブを見てととしてジェフアトウッドは言います

ここに画像の説明を入力してください


10
  • ActionBarCompat古いデバイスをサポートしたいすべての新しいプロジェクトに使用する必要があると強く信じています。

  • また、既存のプロジェクトを移行することも意味があります。したがって、すぐにActionBarCompatを移行または使用する理由と、既存のプロジェクトを移行する方法について説明します。

なぜActionBarSherlockよりもActionBarCompatを優先する必要があるのですか?

ActionbarSherlockよりもActionbarCompatを選ぶべき多くの理由があります。

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

  2. もう1つの正当な理由は、Navigation Drawer patternすぐに使用できることですが、ActionBarSherlockはそうではありません。したがって、このドロワーを既存のプロジェクト/アプリに追加する場合は、移行する必要があります。

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


7

APIがAPI18以降に公式の Actionbarサポートを公開したので、多分私たちは答えを更新する必要がありますか?

以下のブロックは、これら2つのライブラリに関する公式ブログからの抜粋です。

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

  • アクションバーAPIの進化に合わせて更新を維持できます。
  • 統合された祖先ナビゲーションのサポート。
  • フレームワークMenuおよびMenuItemクラスの使用。
  • Support LibraryのFragmentクラスを引き続き使用します。
  • DrawerLayoutで使用するActionBarDrawerToggleの統合サポート。
  • PopupMenuのバックポート。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.