ActionBarSherlock ve ActionBar Uyumluluğu arasındaki fark


156

ActionBarSherlock ve Action Bar Uyumluluğu arasındaki fark nedir

Birkaç gün önce Google, beni çok şaşırtan ActionBar Uyumluluğunu yayınladı. Eylem Çubuğu Uyumluluğu, ActionBarSherlock ile aynı mı ve kodlama aynı mı?

Örnek: Uygulama çubuğu "yukarı" veya ActionBar.Tab içinde gezinmek için İşlem Çubuğu Uyumluluğu'nda destekleniyor mu?


12
FYI Square'in eng blogu için bununla
Jake Wharton

3
youtube.com/… Google, ActionBarSherlock ve ActionBarCompact
Rolf

Bu, ABS'den ABCompat'a geçmek isteyenler için önemli ve kullanışlı bir konu. Teşekkürler.
Ashokchakravarthi Nagarajan

Yanıtlar:


61

ActionBarSherlock, uygulamanızın hangi android API sürümünün çalıştığından bağımsız olarak uygulamanıza bir işlem çubuğu verir. Eylem Çubuğu Uyumluluğu, işlem çubuğunu yalnızca üzerinde çalıştığınız cihaz API düzey 3.0 veya üstü ise verir.

* Çalıştırdığınız cihaz 3.0 veya üstü değilse, ActionBarSherlock'un yerel bir eylem çubuğu değil, kendi özel eylem çubuğunu kullanacağını unutmayın.

--DÜZENLE--

Görünüşe göre işler değişti ve artık ActionBarSherlock ve Action Bar Uyumluluğu arasında hiçbir fark yok. Ayrıntılar için lütfen aşağıdaki yorumları okuyun.

--DÜZENLE--

Şimdi her ikisini de kullandıktan sonra, aslında ActionBarSherlock'u Action Bar Uyumluluğuna tercih ettiğimi söyleyebilirim. ActionBarSherlock kullanımı gerçekten çok kolay ve güzel.

--EDIT-- LOG_TAG'ın belirttiği gibi, artık Android Destek Kitaplığı'ndaki eylem çubuğu için destek var. Henüz kullanma şansım olmadı, ama bunun en iyisi olduğunu hayal ediyorum.


1
@Annidamo Uyarı için teşekkürler. Ben deliriyor olabilirim, ama bir noktada, android uyumluluk paketindeki sürüm 3.0 öncesi ise bir tane vermediğine yemin edebilirim. Cevabımı değiştirdim.
Kurtis Nusbaum

35
Ayrıca, cevap tamamen yanlıştır - uyumluluk örneğinin amacı 3.0 öncesi cihazları desteklemektir.
AlikElzin-kilaka

8
Google, Destek Kitaplığı r18'in bir parçası olan ActionBarCompat adlı geriye dönük uyumlu yeni bir Action Bar uygulaması yayınladı. ActionBarCompat API'leri, temel 2.1 Android sürümüne uyumluluk ile gerekli Action Bar tasarım desenini uygulamanıza oluşturmanıza olanak tanır.
LOG_TAG

3
Aşağıdaki bağlantı size söyler whyve howyeni
ActionBarCompat

2
Sadece eklemek için, kendi uygulamalarında Chromecast entegrasyonu isteyebileceklerini düşünenler için, appcompat kütüphanesini kullanmanızı şiddetle tavsiye ederim. Chromecast entegrasyonu için gerekli MediaRouter API'ları uygulama uyumluluğuna bağlıdır; ActionBarSherlock kullanılamaz.
clu

113

ActionBarSherlock ve ActionBarCompat karşılaştırması:

ActionBarSherlock vs ActionBarCompat Lib arasında birkaç kod farkı koymak istiyorum

 ActionBarSherlock vs ActionBarCompat ** güçlü metin **

Bazı uygulamaları ActionBarSherlock'tan ActionBarCompat'a taşıyabiliriz:

adımlar:

  1. AppCompat projesini içe aktarın .

  2. Değiştir SherlockFragmentActivityile ActionBarActivity.

  3. Değiştir SherlockFragmentile Fragment.

  4. Değişim Menu, MenuItemve getSupportMenuInflater()referanslar. Eylem Görünümlerini alma şeklinizi değiştirin.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Temalarınızı ve Stillerinizi değiştirin .

Daha fazla bilgi için lütfen + NickButcher (Google) tarafından sunulan bu slaytlara bakın

resim açıklamasını buraya girin

Kaynaklar için teşekkürler: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

ABC hakkında daha fazla bilgi için bu geliştirici.android'i okumayı unutmayın !

Not: Ünite testleri için ABS ile aynı şekilde ayarlama, destek kitaplığıyla maalesef mümkün değildir.

Çıktı:

resim açıklamasını buraya girin

Kredi: Gabriele Mariotti


1
Sadece artık Gradle projelerine ABS'nin eklenebileceği compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar've kütüphane projesi olması gerekmeyen bir güncelleme .
ankushg

Detay açıklama için teşekkürler
Biswajit Das

41

@Kurtis Nusbaum'u pratik bir örnekle tamamlamak.

GÜNCELLEME: @ rudy-s'nin söylediği gibi, en yeni android destek kütüphanesi (api 18) ile, zaten actionbar (ActionBarCompat sınıfı olarak adlandırılır) için yerleşik desteğe sahip olduklarını gördüm.

ActionBarSherlock ve ActionBar Uyumluluğu arasındaki görsel farkı göstermek için iki basit uygulama geliştirdim. Karşılaştırmalı resimlere bakın:

Uyumluluk kitaplığını kullanan uygulama

Sherlock kütüphanesini kullanan uygulama

Şimdi menü düğmesine basıldığında görünüm:

Menüden uyumluluğu kullanan uygulama basıldı

Menüde sherlock kullanan uygulama basıldı


Gördüğünüz gibi, görüntüler sadece söylenenleri zorlar. Eylem Çubuğu Uyumluluğu, işlem çubuğunu yalnızca üzerinde çalıştığınız cihaz API düzey 3.0 veya üstü ise verir. Sherlock daha genel olsa da.

Aşağıda uygulama kaynağını görebilirsiniz.

Menü xml dosyası aynı:

<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>

Uyumluluğun etkinliği:

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 kullanıcısının aktiviteleri:

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 uygulamasında ek bir yapılandırma gerekliydi:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">

GÜNCELLEME: @ rudy-s'nin söylediği gibi, en yeni android destek kütüphanesi (api 18) ile, zaten actionbar (ActionBarCompat sınıfı olarak adlandırılır) için yerleşik desteğe sahip olduklarını gördüm.


5
Aslında bu tamamen doğru değil. Compat library, Gingerbread üzerinde bir ActionBar uygulaması yapabilir ve verir. Bu uygulama örneğin GB'de bir AB verir ve Sherlock değil Compat'i kullanmaz. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid

Bu actionbarcompat örneğini çıkarırsanız (örneğin android-17 sdk'den) ve ADT'de oluşturursanız, bir ActionBar ile bir GB cihazında çalışır. 2.3.5 ile bir Desire HD'de onaylamayı kendim test ettim.
Hamid

Tamam anladım. Ancak, ActionBarSherlock daha fazla özellik sunuyor, değil mi?
Bruno Mateus

2
En yeni android destek kütüphanesi (api 18) ile, zaten actionbar (ActionBarCompat sınıfı olarak adlandırılır) için yerleşik desteğe sahip olduklarını gördüm.
rudy s

Kızıl Sakal? Sevdim.
Carlos P

39

Actionbar Sherlock, basit Actionbar uyumluluk projesinden çok daha gelişmiş ve çok daha iddialı.

İşlem çubuğunun uyumluluğu, yalnızca uygulamanızın üstüne bir İşlem Çubuğu yerleştirmek istiyorsanız "örnek" veya iyi bir başlangıç ​​noktası olarak kabul edilebilir.

ActionBarSherlock, uyumluluk kitaplığı üzerine kurulur ve size (işlem çubuğu uyumluluk örneği gibi) 3.0 öncesi cihazlarda bir Eylem Çubuğu verir. Ayrıca, ActionBar Uyumluluk kodunda bulunmayan ekstra özelliklere de sahiptir. Bu, bunlarla sınırlı olmamak üzere

  • setNavigationMode (eylem çubuğundaki Sekmeler ve döndürücüler için)
  • İletişim Kutusu Parçaları
  • Bağlamsal İşlem Çubuğu (CAB), örneğin çoklu seçim için kullanılan eylem çubuğunu ele geçiren bir menü (http://developer.android.com/design/patterns/new-4-0.html) Bu bir ICS özelliğidir ( !) Bunun için ActionMode sınıfının (API seviye 11'de tanıtıldı) bir uygulamasının ActionbarSherlock kütüphanesine dahil edilmesi gerekiyordu
  • Fragment ve FragmentActivity uygulamaları - fragmanlar onCreateOptions menüsünü uygulayabildiğinden, SupportMenuInflater öğesinin kullanıldığından emin olmamız gerekir.
  • Holo.Dark ve Holo.Light'ın (Tema.Sherlock, Tema.Sherlock.Light) çok farklı olmayan iki tema
  • ICS "bölünmüş eylem çubuğu" özelliğine sahiptir

ActionbarSherlock'u kullanırken gördüğüm tek dezavantaj, kendinizi bu kütüphaneye kilitlemeniz. Herhangi bir nedenden dolayı yakın gelecekte ölecekse, bunu kendiniz korumak zorunda kalacaksınız (örneğin, Jellybean uygulaması gelmiyorsa). Tüm parçalarınız SherlockFragemnt ve tüm faaliyetlerinizi genişlettiği için bu bir güçlüktür (büyük bir sorun değil). SherlockActivity.


Bir şey mi kaçırıyorum? Görünüşe göre çoklu seçim
ABS'de

1
Gecikme için üzgünüm. Çoklu seçim tek başına ABS tarafından desteklenmez. Ancak ABS'nin ActionMode sınıflarının kendi uygulamaları olduğu için ABS "ActionMode" kullanarak Multiselect uygulayabilirsiniz. "Çoklu seçim moduna" girerken, ListView'in seçim modunu CHOICE_MODE_MULTIPLE olarak ayarlayacak ve getSherlockActivity () öğesini çağırarak ActionMode'u çağıracaksınız. StartActionMode (geri arama)
Glenn Bech

26

@Jake uygulaması, daha kesin olmak gerekirse, Actionbar uyumluluğundan çok daha ileri gider Actionbar Compat, Honeycomb (API 13) öncesi sürümler için sözde-actionbar ile tüm uygulamaları nasıl destekleyebileceğinize dair temel bir örnektir. Hedefleri aynı çapraz uyumlu eylem çubuğu olmasına rağmen, farklı yaklaşımları vardır.

Patlama Yaklaşımı

Bu uygulama o adında bir temel sınıf oluşturmak yerine Uyumluluk Android desteği kütüphanesinin hiçbir faydalanmak ActionBarActivity bir tek bir örneğini oluşturmak Yardımcısı fabrikasında kendisi kadar bu yardımcı fiil olduğu API'LARI üç segment için döner ayrılmakta uygulanması, bunun döner

En ilginç kısmı ActionbarBaseHelper'de , çünkü en önemli koda sahip olduğundan, bu sınıfı anlamanızı öneririm ve tüm örneği alırsınız.

Eylem Çubuğu Sherlock

Bu zor yanılmaz çünkü, ben yazar değilim belki Jake bunu daha fazla açıklayabilir, ama bir deneyeceğim.

Uyumluluk Sherlock farklı bir uygulama yapmak gibi ama biri "Compat" ve diğeri Native için. Sizi SherlockActivity'den veya SherlockFragmentActivity'den genişletmeye zorlar, çünkü bu iki temel sınıf ActionBar'ı gönderme yöntemine sahiptir.

Bu, tek bir gönderide açıklanamayacak büyük ve karmaşık bir projedir. Sherlock Github repo etrafında bir bakış kapmak ve Jeff Atwood dediği gibi kazmak öneririz

resim açıklamasını buraya girin


10
  • ActionBarCompatEski cihazları desteklemek isteyen tüm yeni projeler için kullanmanız gerektiğine inanıyorum .

  • Mevcut projeleri taşımak da mantıklı olabilir. ActionBarCompat'ı neden hemen taşımanız veya kullanmanız gerektiğini ve mevcut projelerin nasıl taşınacağını öğrenmek için okumaya devam edin.

ActionBarSherlock yerine neden ActionBarCompat'ı tercih etmelisiniz?

ActionbarSherlock yerine ActionbarCompat'ı tercih etmeniz için birçok neden vardır.

  1. Her şeyden önce bu proje Google tarafından, Destek Kitaplığı'nın bir parçasıdır ve bu nedenle Google'ın yeni Android ile aynı anda yeni Action Bar ile ilgili şeyleri desteklemesi muhtemeldir.

  2. Diğer bir iyi neden Navigation Drawer patternise ActionBarSherlock'un kutudan çıktığı anda desteklemesidir . Bu çekmeceyi mevcut bir projeye / uygulamaya eklemek istiyorsanız, taşımanız gerekir.

  3. Son ve Önemli olan, ActionBarSherlock'un yaratıcısı Jake Wharton'un Google + 'da ActionBarSherlock'un daha fazla geliştirilmesinin durdurulduğunu açıkladı. ActionBarSherlock 4.4 son sürümdür ve hata düzeltmeleri alabilir - ancak yeni özellikler olmayacaktır: Dolayısıyla, eylem çubuğuna yeni işlevler dahil edilirse, actionbarsherlock ile çalışmaya devam edemezsiniz.


7

Beri İşlem Çubuğu desteği resmi yayınlanan google çünkü Belki cevabını güncellemeniz gerekmektedir API18 ?

Aşağıdaki blok bu iki kütüphane hakkında resmi blogdan alınmıştır :

Üçüncü taraf bir çözüm (ActionBarSherlock gibi) kullanıyorsanız, yeni sürüme geçmeyi düşünmeniz için birkaç neden vardır:

  • İşlem Çubuğu API'sı geliştikçe güncellenebilir.
  • Tümleşik Ata Gezinme desteği.
  • Menu ve MenuItem sınıflarının kullanımı.
  • Destek Kitaplığı'nın Parça sınıfını kullanmaya devam edin.
  • DrawerLayout ile kullanım için ActionBarDrawerToggle için entegre destek.
  • PopupMenu'nun Backport'u.

ActionBarSherlock, geliştiricilere uzun süre çok iyi hizmet veren sağlam ve iyi test edilmiş bir kütüphanedir. Zaten kullanıyorsanız ve şu anda yukarıdakilerden herhangi birine ihtiyaç duymuyorsanız, taşımanıza gerek yoktur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.