Perbedaan antara ActionBarSherlock dan Kompatibilitas ActionBar

156

Apa perbedaan antara Kompatibilitas ActionBarSherlock dan Action Bar

Beberapa hari yang lalu Google baru saja merilis Kompatibilitas ActionBar yang membuat saya sangat bingung. Apakah Kompatibilitas Bar Aksi berfungsi sama dengan ActionBarSherlock dan apakah kodingnya sama?

Contoh: Apakah ikon aplikasi untuk menavigasi "ke atas" atau ActionBar.Tab didukung di Kompatibilitas Bilah Tindakan?

xDragonZ
sumber
12
FYI Saya menulis posting blog tentang ini untuk blog Square's eng: corner.squareup.com/2012/05/actionbarsherlock-as-a-base.html
Jake Wharton
3
youtube.com/... Ini adalah apa yang Google pikirkan tentang ActionBarSherlock vs ActionBarCompact
Rolf ツ
Ini adalah utas penting dan bermanfaat, bagi mereka yang ingin bermigrasi dari ABS ke ABCompat. Terima kasih.
Ashokchakravarthi Nagarajan

Jawaban:

61

ActionBarSherlock memberi aplikasi Anda bilah tindakan terlepas dari * apa versi Android API yang sedang dijalankan aplikasi Anda. Kompatibilitas Bilah Tindakan memberi Anda bilah tindakan hanya jika perangkat yang Anda jalankan adalah API level 3.0 atau lebih tinggi.

* Perhatikan bahwa jika perangkat yang Anda jalankan tidak 3.0 atau di atas, ActionBarSherlock akan menggunakan implementasi sendiri dari action bar, bukan yang asli.

--EDIT--

Tampaknya hal-hal telah berubah dan sebenarnya tidak ada perbedaan antara ActionBarSherlock dan Kompatibilitas Bilah Tindakan lagi. Silakan baca komentar di bawah untuk detailnya.

--EDIT--

Setelah menggunakan keduanya sekarang, saya dapat mengatakan bahwa saya sebenarnya lebih memilih kompatibilitas ActionBarSherlock ke Action Bar. ActionBarSherlock sangat mudah dan menyenangkan untuk digunakan.

--EDIT-- Seperti LOG_TAG sebutkan, sekarang ada dukungan untuk bilah tindakan di Perpustakaan Dukungan Android. Saya belum punya kesempatan untuk menggunakannya, tapi saya akan membayangkan itu yang terbaik untuk digunakan.

Kurtis Nusbaum
sumber
1
@Anidamo Terima kasih atas bantuannya. Saya mungkin akan menjadi gila, tetapi saya bisa bersumpah bahwa pada satu titik, versi dalam paket kompatibilitas android tidak memberi Anda satu jika pra-3.0 Anda. Saya telah memodifikasi jawaban saya.
Kurtis Nusbaum
35
Juga, jawabannya sama sekali salah - tujuan dari contoh kompatibilitas adalah untuk mendukung perangkat pra-3.0.
AlikElzin-kilaka
8
Google merilis implementasi Action Bar baru kompatibel-kompatibel yang disebut ActionBarCompat yang merupakan bagian dari Perpustakaan Dukungan r18. API ActionBarCompat memungkinkan Anda membangun pola desain Action Bar yang penting ke dalam aplikasi Anda, dengan kompatibilitas luas kembali ke Android 2.1.
LOG_TAG
3
Tautan berikut memberi tahu Anda whydan howuntuk menggunakan API ActionBarCompat baru, android-developers.blogspot.in/2013/08/…
VenoM
2
Hanya untuk menambahkan, bagi mereka yang berpikir mereka ingin integrasi Chromecast di aplikasi mereka, saya sangat merekomendasikan menggunakan perpustakaan appcompat. API MediaRouter yang diperlukan untuk integrasi Chromecast tergantung pada appcompat; ActionBarSherlock tidak dapat digunakan.
clu
113

ActionBarSherlock vs ActionBarCompat:

Saya Hanya ingin menaruh sedikit perbedaan kode antara ActionBarSherlock vs ActionBarCompat Lib

 ActionBarSherlock vs ActionBarCompat ** teks kuat **

Kami dapat memigrasi beberapa aplikasi dari ActionBarSherlock ke ActionBarCompat:

Langkah:

  1. Impor proyek AppCompat .

  2. Ganti SherlockFragmentActivitydengan ActionBarActivity.

  3. Ganti SherlockFragmentdengan Fragment.

  4. Ubah Menu, MenuItemdan getSupportMenuInflater()referensi. Ubah cara Anda mendapatkan Tampilan Tindakan.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Ubah Tema dan Gaya Anda .

Untuk info lebih lanjut, silakan merujuk slide ini oleh + NickButcher (Google)

masukkan deskripsi gambar di sini

Terima kasih kepada Sumber: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Jangan lupa membaca pengembang ini. Android untuk lebih lanjut tentang ABC!

Catatan: Menyiapkannya untuk pengujian unit dengan cara yang sama seperti ABS sayangnya tidak dimungkinkan dengan pustaka dukungan.

Keluaran:

masukkan deskripsi gambar di sini

Penghargaan: Gabriele Mariotti

LOG_TAG
sumber
1
Hanya pembaruan yang ABS sekarang juga dapat ditambahkan ke proyek Gradle via compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'dan tidak harus menjadi proyek perpustakaan.
ankushg
Terima kasih atas penjelasan detailnya
Biswajit Das
41

Baru saja menyelesaikan apa yang @Kurtis Nusbaum dengan contoh praktis.

UPDATE: seperti yang dikatakan @ rudy-s, dengan pustaka dukungan android terbaru (api 18), saya melihat mereka sudah memiliki dukungan bawaan untuk actionbar (disebut kelas ActionBarCompat).

Saya membangun dua aplikasi sederhana untuk menunjukkan perbedaan visual antara ActionBarSherlock dan Kompatibilitas ActionBar. Lihat gambar perbandingan:

Aplikasi menggunakan perpustakaan kompatibilitas

Aplikasi menggunakan pustaka sherlock

Sekarang tampilan ketika tombol menu ditekan:

Aplikasi menggunakan kompatibilitas pada menu ditekan

Aplikasi menggunakan sherlock pada menu ditekan


Seperti yang Anda lihat, gambar hanya menegakkan apa yang dikatakan. Kompatibilitas Bilah Tindakan memberi Anda bilah tindakan hanya jika perangkat yang Anda jalankan adalah API level 3.0 atau lebih tinggi. Sementara Sherlock lebih umum.

Di bawah ini Anda dapat melihat sumber aplikasi.

File menu xml adalah sama:

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

Aktivitas kompatibilitas:

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

Aktivitas Sherlock:

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);
    }

}

Konfigurasi tambahan diperlukan pada aplikasi sherlock:

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

UPDATE: seperti yang dikatakan @ rudy-s, dengan pustaka dukungan android terbaru (api 18), saya melihat mereka sudah memiliki dukungan bawaan untuk actionbar (disebut kelas ActionBarCompat).

Bruno Mateus
sumber
5
Sebenarnya ini tidak sepenuhnya benar. Pustaka Compat dapat, dan memberi Anda implementasi ActionBar di Gingerbread. Aplikasi ini misalnya memberi Anda AB pada GB dan tidak menggunakan Sherlock tetapi Compat. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid
Tidak perlu, jika Anda mengeluarkan sampel actionbarcompat (misalnya dari android-17 SDK) dan membangunnya dalam ADT, itu akan berjalan pada perangkat GB dengan ActionBar. Saya baru saja mengujinya sendiri untuk mengonfirmasi Desire HD dengan 2.3.5.
Hamid
OK aku mengerti. Namun, ActionBarSherlock menyediakan lebih banyak fitur, bukan?
Bruno Mateus
2
Dengan pustaka dukungan android terbaru (api 18), saya melihat mereka sudah memiliki dukungan bawaan untuk actionbar (disebut kelas ActionBarCompat).
rudy s
GingerBEARD? Suka.
Carlos P
39

Actionbar Sherlock jauh lebih maju dan jauh lebih ambisius daripada proyek kompatibilitas Actionbar sederhana.

Kompatibilitas bilah Tindakan dapat dianggap sebagai "sampel" atau titik awal yang baik jika Anda hanya ingin memukul Bilah Tindakan di atas aplikasi Anda.

ActionBarSherlock dibangun di perpustakaan kompatibilitas, dan memberi Anda (seperti sampel kompatibilitas panel aksi) Action Bar di perangkat pra-3.0. Selain itu ia memiliki fitur tambahan yang tidak ada dalam kode Compat ActionBar. Ini termasuk fitur seperti, tetapi tidak terbatas pada

  • setNavigationMode (untuk Tab dan pemintal di bilah tindakan)
  • Fragmen Dialog
  • Contextual Action Bar (CAB) sebuah menu yang mengambil alih action bar, digunakan misalnya untuk multi pilih (http://developer.android.com/design/patterns/new-4-0.html) Ini adalah fitur ICS ( !) Untuk ini, implementasi kelas ActionMode (diperkenalkan di API level 11) harus diperkenalkan ke perpustakaan ActionbarSherlock
  • Implementasi Fragmen dan FragmentAktivitas - karena fragmen dapat mengimplementasikan menu onCreateOptions, kita perlu memastikan bahwa SupportMenuInflater digunakan.
  • Dua tema yang sangat berbeda dengan Holo.Dark dan Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
  • Fitur ICS "tindakan split bar"

Satu-satunya downside yang saya lihat dalam menggunakan ActionbarSherlock adalah Anda mengunci diri Anda di perpustakaan itu. Jika karena alasan tertentu akan mati dalam waktu dekat, Anda harus mempertahankannya sendiri (misalnya jika tidak ada implementasi Jellybean yang muncul). Ini merepotkan (bukan masalah besar) karena semua fragmen Anda meluas ke SherlockFragemnt dan semua Aktivitas Anda. SherlockActivity.

Glenn Bech
sumber
Apakah saya melewatkan sesuatu? Tampaknya multi pilih BUKAN dukungan di ABS
jiduvah
1
Maaf atas keterlambatannya. Multi pilih tidak dengan sendirinya didukung oleh ABS. Tapi, Anda bisa mengimplementasikan Multiselect dengan menggunakan ABS "ActionMode", karena ABS memiliki implementasi sendiri dari kelas ActionMode. Saat memasuki "mode multi-pilih", Anda akan mengatur mode pilihan ListView ke CHOICE_MODE_MULTIPLE, dan memanggil ActionMode dengan memanggil getSherlockActivity (). StartActionMode (callback)
Glenn Bech
26

Well, implementasi @Jake melangkah lebih jauh dari apa yang dilakukan compat Actionbar, lebih tepatnya Actionbar Compat hanyalah contoh dasar tentang bagaimana Anda bisa mendukung semua aplikasi dengan pseudo-actionbar untuk rilis sebelum dari Honeycomb (API 13). Meskipun target mereka adalah actionbar yang kompatibel lintas yang sama, mereka memiliki pendekatan yang berbeda.

Pendekatan ActionbarCompat

Implementasi ini tidak menggunakan pustaka dukungan Kompatibilitas Android sebagai gantinya ia membuat kelas dasar yang disebut ActionBarActivity membuat sebuah instance tunggal dari Helper ini bertindak sebagai pabrik sendiri yang mengembalikan implementasi yang berbeda untuk tiga segmen APIS, ia mengembalikan

Bagian yang paling menarik adalah di ActionbarBaseHelper , karena memiliki kode paling penting, saya sarankan Anda memahami kelas ini dan Anda akan mendapatkan seluruh contoh.

Action Bar Sherlock

Yah, ini memang sulit, pertama, karena saya bukan penulis, mungkin Jake dapat menjelaskan lebih lanjut tentang ini, tetapi saya akan mencobanya.

Sama seperti compat Sherlock membuat implementasi yang berbeda tetapi satu untuk "Compat" dan yang lainnya adalah Asli. Ini memaksa Anda untuk memperluas dari SherlockActivity atau dari SherlockFragmentActivity, karena dua kelas dasar ini memiliki metode untuk mengirimkan ActionBar.

Ini adalah proyek besar dan kompleks, yang tidak dapat dijelaskan dalam satu posting. Sarankan Anda menggali sekitar Sherlock Github, coba lihat dan seperti yang dikatakan Jeff Atwood

masukkan deskripsi gambar di sini

Necronet
sumber
10
  • Saya sangat percaya bahwa Anda harus menggunakan ActionBarCompatuntuk semua proyek baru yang ingin mendukung perangkat yang lebih lama.

  • Mungkin juga masuk akal untuk melakukan migrasi proyek yang ada. Jadi bacalah terus untuk mengetahui mengapa Anda harus bermigrasi atau menggunakan ActionBarCompat segera dan cara memigrasi proyek yang ada.

Mengapa Anda lebih suka ActionBarCompat daripada ActionBarSherlock?

Ada banyak alasan mengapa Anda harus memilih ActionbarCompat daripada ActionbarSherlock.

  1. Pertama-tama proyek ini oleh Google, adalah bagian dari Perpustakaan Dukungan dan dengan demikian kemungkinan akan mendukung hal-hal terkait Action Bar baru pada saat yang sama Google merilisnya dengan stok Android.

  2. Alasan bagus lainnya adalah mendukung Navigation Drawer patterntepat di luar kotak, sementara ActionBarSherlock tidak. Jadi, jika Anda ingin menambahkan laci ini ke proyek / aplikasi yang ada, Anda harus bermigrasi.

  3. Yang terakhir dan Penting adalah, bahwa pencipta ActionBarSherlock, Jake Wharton, mengumumkan di Google+ bahwa pengembangan lebih lanjut dari ActionBarSherlock telah dihentikan. ActionBarSherlock 4.4 adalah rilis terakhir dan mungkin mendapatkan perbaikan bug - tetapi tidak akan ada fitur baru: Jadi, jika fungsionalitas baru termasuk dalam actionbar Anda mungkin tidak mengikutinya dengan actionbarsherlock.

Steve
sumber
7

Mungkin kita harus memperbarui jawabannya karena google menerbitkan dukungan Actionbar resmi sejak API18 ?

blok di bawah ini dari blog resmi tentang dua perpustakaan ini:

Jika Anda menggunakan solusi pihak ketiga (seperti ActionBarSherlock), ada beberapa alasan untuk mempertimbangkan peningkatan:

  • Dapat terus diperbarui saat API Bar Tindakan berevolusi.
  • Dukungan Navigasi Ancestral Terintegrasi.
  • Penggunaan kelas kerangka kerja Menu dan MenuItem.
  • Terus menggunakan kelas Fragmen Perpustakaan Dukungan.
  • Dukungan terintegrasi untuk ActionBarDrawerToggle untuk digunakan dengan DrawerLayout.
  • Backport dari PopupMenu.

ActionBarSherlock adalah perpustakaan yang solid dan teruji dengan baik yang telah melayani pengembang dengan sangat baik sejak lama. Jika Anda sudah menggunakannya dan saat ini tidak memerlukan hal-hal di atas maka tidak perlu bermigrasi.

ruidge
sumber