Різниця між сумісністю ActionBarSherlock та ActionBar


156

У чому різниця між сумісністю ActionBarSherlock та бар дій

Кілька днів тому Google щойно випустив сумісність ActionBar, які мене так збентежили. Це сумісність панелі дій працює так само, як і ActionBarSherlock, і кодування така ж?

Приклад: Чи підтримується піктограма додатка для навігації "вгору" або ActionBar.Tab у сумісному рядку дій?


12
FYI Я написав повідомлення про це для блогу Eng's Eng: corner.squareup.com/2012/05/actionbarsherherlock-as-a-base.html
Джейк Уортон

3
youtube.com/… Це те, що Google думає про ActionBarSherlock vs ActionBarCompact
Rolf

Це важлива і корисна нитка для тих, хто хоче перейти з ABS до ABCompat. Дякую.
Ashokchakravarthi Nagarajan

Відповіді:


61

ActionBarSherlock надає вашій програмі панель дій незалежно від того, на якій версії API для Android працює ваш додаток. Сумісність панелі дій дає панель дій, лише якщо пристрій, на якому ви працюєте, має рівень API 3.0 або вище.

* Зауважте, що якщо пристрій, на якому ви працюєте, не має версії 3.0 або вище, ActionBarSherlock буде використовувати власну власну реалізацію панелі дій, а не рідну.

--EDIT--

Здається, все змінилося, і фактично вже немає різниці між ActionBarSherlock та сумісністю панелі дій. Будь ласка, прочитайте коментарі нижче для отримання детальної інформації.

--EDIT--

Після використання обох зараз, я можу сказати, що я дійсно віддаю перевагу сумісності ActionBarSherlock перед панеллю дій. ActionBarSherlock дуже простий і приємний у використанні.

--EDIT - Як згадувалося в LOG_TAG, зараз в Бібліотеці підтримки Android підтримується панель дій. У мене ще не було можливості використовувати його, але я б уявив, що це найкраще.


1
@Anidamo Дякую за голову вгору Я можу бути божевільним, але я можу присягнути, що в один момент версія в пакеті сумісності для Android не дала вам жодної, якщо ваш попередній 3.0. Я змінив свою відповідь.
Куртис Нусбаум

35
Також відповідь абсолютно невірний - метою прикладу сумісності є підтримка пристроїв, що передують 3.0.
АлікЕльзін-кілака

8
Компанія Google випустила нову сумісну реалізацію панелі дій під назвою ActionBarCompat, яка є частиною бібліотеки підтримки r18. API ActionBarCompat дозволяють вам створити найважливіший шаблон дизайну панелі дій у вашому додатку з широкою сумісністю назад до Android 2.1.
LOG_TAG

3
Наступне посилання повідомляє вам whyі howвикористовувати новий ActionBarCompat API, android-developers.blogspot.in/2013/08/…
VenoM

2
Додамо лише, що тим, хто думає, що може захотіти інтеграцію Chromecast у свій додаток, настійно рекомендую використовувати бібліотеку appcompat. API MediaRouter, необхідний для інтеграції Chromecast, залежить від програми; ActionBarSherlock не можна використовувати.
clu

113

ActionBarSherlock vs ActionBarCompat:

Я просто хочу покласти декілька різниць у коді між ActionBarSherlock проти ActionBarCompat Lib

 ActionBarSherlock vs ActionBarCompat ** сильний текст **

Ми можемо перенести деякі програми з ActionBarSherlock на ActionBarCompat:

кроки:

  1. Імпорт AppCompat проекту .

  2. Замініть SherlockFragmentActivityнаActionBarActivity .

  3. Замініть SherlockFragmentнаFragment .

  4. Зміна Menu, MenuItemі getSupportMenuInflater()посилання. Змініть спосіб отримання переглядів дій.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Змініть свої теми та стилі .

Для отримання додаткової інформації, перегляньте ці слайди від + NickButcher (Google)

введіть тут опис зображення

Завдяки джерелам: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherherlock/

Не забудьте прочитати цей developer.android, щоб дізнатися більше про ABC!

Примітка. Налаштувати його для тестування пристрою так само, як і ABS, на жаль, неможливо з бібліотекою підтримки.

Вихід:

введіть тут опис зображення

Кредити: Габріеле Маріоти


1
Просто оновлення, що ABS тепер також можна додавати до проектів Gradle через, compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'і це не повинно бути бібліотечним проектом.
ankushg

Дякую за детальне пояснення
Biswajit Das

41

Тільки завершуємо те, що @Kurtis Nusbaum дотичним прикладом.

ОНОВЛЕННЯ: як сказав @ rudy-s, з новітньою бібліотекою підтримки для Android (api 18) я побачив, що у них вже є вбудована підтримка панелі дій (називається ActionBarCompat клас).

Я створив два простих додатки, щоб показати візуальну різницю між сумісністю ActionBarSherlock та ActionBar. Дивіться порівняльні зображення:

Додаток, що використовує бібліотеку сумісності

Додаток за допомогою бібліотеки шерлок

Тепер поява при натисканні кнопки меню:

Додаток, що використовує сумісність у натиснутому меню

Додаток за допомогою шерлока в натиснутому меню


Як бачимо, образи просто нав'язують сказане. Сумісність панелі дій дає панель дій, лише якщо пристрій, на якому ви працюєте, має рівень 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);
    }

}

У додатку Шерлок був необхідний додатковий конфігурація:

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

ОНОВЛЕННЯ: як сказав @ rudy-s, з новітньою бібліотекою підтримки для Android (api 18) я побачив, що у них вже є вбудована підтримка панелі дій (називається ActionBarCompat клас).


5
Власне, це не зовсім правильно. Бібліотека Compat може і дає вам реалізацію ActionBar на Пряників. Цей додаток, наприклад, дає вам AB на GB і не використовує Sherlock, а Compat. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Хамід

Немає потреби, якщо витягнути цей зразок actionbarcompat (наприклад, з sdk для android-17) і побудувати його в ADT, він запуститься на пристрої GB з ActionBar. Я просто перевірив це сам, щоб підтвердити на Desire HD з 2.3.5.
Хамід

Добре. Я зрозумів. Однак ActionBarSherlock надає більше функцій, чи не так?
Бруно Матеус

2
З новітньою бібліотекою підтримки для Android (api 18) я побачив, що у них вже є вбудована підтримка панелі дій (так званий клас ActionBarCompat).
rudy s

Пряники? Любіть це.
Карлос П

39

Панель дій Шерлок набагато досконаліша та набагато амбітніша, ніж простий проект сумісності Actionbar.

Сумісність панелі дій можна вважати "зразком" або хорошою відправною точкою, якщо ви хочете лише вдарити смужку дій у верхній частині програми.

ActionBarSherlock ґрунтується на бібліотеці сумісності та надає вам (як зразок сумісності панелі дій) панель дій на пристроях до 3.0. Крім того, він має додаткові функції, відсутні в коді ActionBar Compat. Сюди входять такі функції, як, але не обмежуються ними

  • setNavigationMode (для вкладок і спінерів на панелі дій)
  • Діалогові фрагменти
  • Контекстуальна панель дій (CAB) - меню, яке займає панель дій, яке використовується, наприклад, для вибору декількох (http://developer.android.com/design/patterns/new-4-0.html) Це функція ICS ( !) Для цього в бібліотеку ActionbarSherlock потрібно було запровадити реалізацію класу ActionMode (введеного на рівні 11 API).
  • Реалізації Fragment та FragmentActivity - оскільки фрагменти можуть реалізувати меню onCreateOptions, нам потрібно переконатися, що використовується SupportMenuInflater.
  • Дві теми, не дуже схожі на Holo.Dark і Holo.Light (Тема.Шерлок, Тема.Шерлок.Лайт)
  • Функція ICS "панель розділених дій"

Єдиний недолік, який я бачу при використанні ActionbarSherlock, - це те, що ви замикаєтесь у цій бібліотеці. Якщо з якихось причин воно зникне в найближчому майбутньому, вам доведеться підтримувати його самостійно (наприклад, якщо жодна реалізація Jellybean не прийде) Це клопот (не величезна проблема), оскільки всі ваші фрагменти поширюють SherlockFragemnt та всі ваші дії. SherlockActivity.


Я щось пропускаю? Здається, що multi select НЕ підтримує ABS
jiduvah

1
Вибачте за затримку. Multi select не підтримується системою ABS. Але ви можете реалізувати мультиселекцію, використовуючи ABS "ActionMode", оскільки ABS має власні реалізації класів ActionMode. Перейшовши в "режим багаторазового вибору", ви встановите режим вибору ListView CHOICE_MODE_MULTIPLE і викликаєте ActionMode, викликаючи getSherlockActivity (). StartActionMode (зворотний виклик)
Glenn Bech

26

Ну а реалізація @Jake йде набагато далі, ніж те, що поєднується з панеллю дій, точніше, Compat панелі дій - лише базовий приклад того, як можна підтримувати всі застосунки за допомогою псевдо-панелі дій для випусків до Honeycomb (API 13). Хоча їх ціль - одна і та ж перехресна сумісна панель дій, вони мають різний підхід.

Дія барCompat Aproach

Ця реалізація не використовує бібліотеку підтримки сумісності Android, а натомість створює базовий клас під назвою ActionBarActivity. Створює єдиний екземпляр Helper. Цей помічник виступає як сама фабрика, яка повертає іншу реалізацію для трьох сегментів APIS, вона повертається

Найцікавіша частина знаходиться у ActionbarBaseHelper , оскільки вона має найважливіший код, я пропоную вам зрозуміти цей клас, і ви отримаєте весь приклад.

Дія бар Шерлок

Ну, це хитро непомітно, тому що я не автор, можливо Джейк може далі пояснити це, але я спробую.

Подібно до того, як компакт Шерлок робить різну реалізацію, але один призначений для "Compat", а другий - Native. Це змушує вас розширювати або з SherlockActivity, або з SherlockFragmentActivity, оскільки в цих двох базових класах є метод диспетчеризації ActionBar.

Це великий і складний проект, який неможливо пояснити за один пост. Запропонуйте вам розкопатися навколо Шерлока Гітбуба, репо схопивши погляд, і як каже Джефф Етвуд

введіть тут опис зображення


10
  • Я переконаний, що ви повинні використовувати ActionBarCompatдля всіх нових проектів, які хочуть підтримувати більш старі пристрої.

  • Це може також мати сенс мігрувати існуючі проекти. Тож читайте далі, щоб дізнатись, чому слід мігрувати або використовувати ActionBarCompat відразу та як мігрувати існуючі проекти.

Чому вам слід віддати перевагу ActionBarCompat над ActionBarSherlock?

Є багато причин, чому вам слід віддати перевагу ActionbarCompat над ActionbarSherlock.

  1. Перш за все, цей проект - компанія Google, є частиною бібліотеки підтримки, і тому, ймовірно, буде підтримувати нові матеріали, пов’язані з рядком дій, в той же час Google випускає їх із запасом Android.

  2. Ще одна вагома причина - це те, що він підтримує Navigation Drawer patternправо з поля, тоді як ActionBarSherlock цього не робить. Таким чином, якщо ви хочете додати цю шухляду до вже наявного проекту / додатку, вам слід перемістити.

  3. Останнє і найважливіше - це те, що творець ActionBarSherlock Джейк Уортон оголосив в Google+, що подальший розвиток ActionBarSherlock припинено. ActionBarSherlock 4.4 - це останній випуск, і він може отримати виправлення помилок - але нових функцій не буде: Отже, якщо нова функціональність буде включена в панель дій, ви можете не бути в курсі дії з панелі дій.


7

Можливо, нам слід оновити відповідь, оскільки Google опублікував офіційну підтримку панелі дій з API18 ?

блок нижче - з офіційного блогу про ці дві бібліотеки:

Якщо ви використовуєте стороннє рішення (наприклад, ActionBarSherlock), є кілька причин розглянути можливість оновлення:

  • Може постійно оновлюватись у міру розвитку API панелі дій.
  • Вбудована підтримка навігаційної навігації.
  • Використання рамкових класів меню та менюItem.
  • Продовжуйте використовувати клас фрагментів бібліотеки підтримки.
  • Комплексна підтримка ActionBarDrawerToggle для використання з DrawerLayout.
  • Бекпорт PopupMenu.

ActionBarSherlock - це надійна і добре перевірена бібліотека, яка дуже довго слугує розробникам. Якщо ви вже користуєтесь ним і зараз не вимагаєте жодного з перерахованих вище, тоді мігрувати не потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.