Разница между ActionBarSherlock и ActionBar Совместимость

156

В чем разница между ActionBarSherlock и Action Bar Compatibility

Несколько дней назад Google только что выпустил ActionBar Compatibility, что меня так запутало. Это совместимость панели действий работает так же, как ActionBarSherlock и кодировка та же?

Пример. Поддерживает ли значок приложения навигацию «вверх» или ActionBar.Tab в разделе «Совместимость панели действий»?

xDragonZ
источник
12
К вашему сведению, я написал сообщение в блоге об этом в англоязычном
Джейк Уортон,
3
youtube.com/… Это то, что Google думает о ActionBarSherlock против ActionBarCompact
Рольф ツ
Это важная и полезная тема для тех, кто хочет перейти с ABS на ABCompat. Спасибо.
Ашокчакраварти Нагараджан

Ответы:

61

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

* Обратите внимание, что если устройство, на котором вы работаете, не 3.0 или выше, ActionBarSherlock будет использовать свою собственную реализацию панели действий, а не нативную.

--РЕДАКТИРОВАТЬ--

Похоже, что все изменилось, и между ActionBarSherlock и Action Bar Compatibility больше нет никакой разницы. Пожалуйста, прочитайте комментарии ниже для деталей.

--РЕДАКТИРОВАТЬ--

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

--EDIT-- Как уже упоминалось в LOG_TAG, в библиотеке поддержки Android теперь поддерживается панель действий. У меня еще не было возможности использовать его, но я думаю, что это лучший вариант.

Куртис Нусбаум
источник
1
@ Anidamo Спасибо за внимание. Возможно, я схожу с ума, но могу поклясться, что в какой-то момент версия в пакете совместимости для Android не дала вам ни одной, если бы вы были до версии 3.0 Я изменил свой ответ.
Куртис Нусбаум
35
Кроме того, ответ совершенно неправильный - целью примера совместимости является поддержка устройств до версии 3.0.
Алик Эльзин-килака
8
Google выпустил новую обратно совместимую реализацию Action Bar под названием ActionBarCompat, которая является частью библиотеки поддержки r18. API-интерфейсы ActionBarCompat позволяют встроить необходимый шаблон дизайна Action Bar в ваше приложение с широкой совместимостью с Android 2.1.
LOG_TAG
3
Следующая ссылка говорит вам whyи howиспользовать новый ActionBarCompat API, android-developers.blogspot.in/2013/08/…
VenoM
2
Просто добавим, что для тех, кто считает, что может захотеть интеграцию Chromecast в свое приложение, я настоятельно рекомендую использовать библиотеку appcompat. API MediaRouter, необходимые для интеграции Chromecast, зависят от appcompat; ActionBarSherlock не может быть использован.
clu
113

ActionBarSherlock против ActionBarCompat:

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

 ActionBarSherlock против ActionBarCompat ** сильный текст **

Мы можем перенести некоторые приложения из ActionBarSherlock в ActionBarCompat:

шаги:

  1. Импортировать проект AppCompat .

  2. Заменить SherlockFragmentActivityна ActionBarActivity.

  3. Заменить SherlockFragmentна Fragment.

  4. Изменение Menu, MenuItemи getSupportMenuInflater()ссылки. Изменить способ, которым вы получаете Action Views.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Измените свои темы и стили .

Для получения дополнительной информации, пожалуйста, обратитесь к этим слайдам + NickButcher (Google)

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

Благодаря источникам: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Не забудьте прочитать этот developer.android для получения дополнительной информации о ABC!

Примечание. Настроить его для модульных тестов так же, как ABS, к сожалению, невозможно с помощью библиотеки поддержки.

Вывод:

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

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

LOG_TAG
источник
1
Просто обновление, которое теперь ABS можно добавлять в проекты Gradle compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'и не обязательно должно быть библиотечным проектом.
ankushg
Спасибо за подробное объяснение
Бисваджит Дас
41

Просто завершаю то, что @Kurtis Nusbaum практическим примером.

ОБНОВЛЕНИЕ: как сказал @ rudy-s, с новейшей библиотекой поддержки Android (API 18), я увидел, что у них уже есть встроенная поддержка панели действий (называется класс ActionBarCompat).

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

Приложение с использованием библиотеки совместимости

Приложение с использованием библиотеки sherlock

Теперь внешний вид при нажатии кнопки меню:

Приложение, использующее совместимость в нажатом меню

Приложение с помощью Шерлока в меню нажата


Как видите, изображения только усиливают сказанное. Совместимость панели действий дает вам панель действий, только если устройство, на котором вы работаете, имеет уровень 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), я увидел, что у них уже есть встроенная поддержка панели действий (называется класс ActionBarCompat).

Бруно Матеус
источник
5
На самом деле, это не совсем правильно. Библиотека Compat может и дает вам реализацию ActionBar на Gingerbread. Это приложение, например, дает вам AB на ГБ и использует не Шерлок, а 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
Gingerbeard? Любить это.
Карлос П
39

Actionbar Sherlock гораздо более продвинутый и более амбициозный, чем простой проект совместимости Actionbar.

Совместимость панели действий можно считать «образцом» или хорошей отправной точкой, если вы хотите просто ударить панель действий поверх вашего приложения.

ActionBarSherlock основывается на библиотеке совместимости и предоставляет вам (как пример совместимости панели действий) панель действий на устройствах до версии 3.0. Кроме того, он имеет дополнительные функции, отсутствующие в коде ActionBar Compat. Это включает в себя такие функции, как, но не ограничиваясь

  • setNavigationMode (для вкладок и счетчиков в панели действий)
  • Фрагменты диалога
  • Contextual Action Bar (CAB) меню, которое берет на себя панель действий, используемую, например, для множественного выбора (http://developer.android.com/design/patterns/new-4-0.html) Это функция ICS ( !) Для этого в библиотеку ActionbarSherlock необходимо было ввести реализацию класса ActionMode (введена в уровне API 11).
  • Реализации Fragment и FragmentActivity - поскольку фрагменты могут реализовывать меню onCreateOptions, мы должны убедиться, что используется SupportMenuInflater.
  • Две темы мало чем отличаются от Holo.Dark и Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
  • Функция ICS «Панель разделенных действий»

Единственный недостаток, который я вижу при использовании ActionbarSherlock, это то, что вы привязываетесь к этой библиотеке. Если по какой-то причине он исчезнет в ближайшем будущем, вам придется поддерживать его самостоятельно (например, если не будет реализована реализация Jellybean). Это хлопотно (не большая проблема), так как все ваши фрагменты расширяют SherlockFragemnt и все ваши действия. SherlockActivity.

Гленн Бек
источник
Я что-то упускаю? Похоже, что multi select не поддерживается в ABS
jiduvah
1
Извините за задержку. Multi select не поддерживается ABS. Но вы можете реализовать Multiselect с помощью ABS «ActionMode», так как у ABS есть свои собственные реализации классов ActionMode. При переходе в «режим множественного выбора» вы должны установить режим выбора ListView на CHOICE_MODE_MULTIPLE и вызывать ActionMode, вызывая getSherlockActivity (). StartActionMode (callback)
Гленн Бех
26

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

ActionbarCompat Aproach

Эта реализация не использует библиотеку поддержки Android совместимости, вместо этого она создает базовый класс с именем ActionBarActivity, создает один экземпляр помощника, этот помощник действует как сама фабрика, которая возвращает другую реализацию для трех сегментов APIS и возвращает

Самая интересная часть в ActionbarBaseHelper , потому что он имеет самый важный код, я предлагаю вам понять этот класс, и вы получите весь пример.

Экшн-бар Шерлок

Ну, это сложно, потому что, я не автор, может, Джейк может объяснить это дальше, но я попробую.

Подобно тому, как compat Sherlock делает другую реализацию, но один для «Compat», а другой - «Native». Это заставляет вас расширяться либо из SherlockActivity, либо из SherlockFragmentActivity, потому что у этих двух базовых классов есть метод для отправки ActionBar.

Это большой и сложный проект, который невозможно объяснить одним постом. Предлагаю вам покопаться в репозитории Шерлока Гитхуба , взгляните и как говорит Джефф Этвуд

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

Necronet
источник
10
  • Я твердо верю, что вы должны использовать ActionBarCompatдля всех новых проектов, которые хотят поддерживать старые устройства.

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

Почему вы должны предпочесть ActionBarCompat, а не ActionBarSherlock?

Есть много причин, почему вы должны предпочесть ActionbarCompat, а не ActionbarSherlock.

  1. Прежде всего, этот проект от Google, является частью библиотеки поддержки и, таким образом, вероятно, будет поддерживать новые вещи, связанные с панелью действий, в то же время Google выпускает их со стандартным Android.

  2. Еще одна веская причина в том, что он поддерживает Navigation Drawer patternсразу из коробки, в то время как ActionBarSherlock нет. Таким образом, если вы хотите добавить этот ящик в существующий проект / приложение, вы должны выполнить миграцию.

  3. Последнее и важное, что создатель ActionBarSherlock Джейк Уортон объявил в Google+, что дальнейшее развитие ActionBarSherlock остановлено. ActionBarSherlock 4.4 является последним выпуском и может содержать исправления ошибок, но новых функций не будет: поэтому, если новые функции включены в панель действий, вы можете не справиться с ней с помощью actionbarsherlock.

Стив
источник
7

Может быть, мы должны обновить ответ, потому что Google опубликовал официальную поддержку Actionbar начиная с API18 ?

блок ниже из официального блога об этих двух библиотеках:

Если вы используете стороннее решение (например, ActionBarSherlock), существует несколько причин для обновления:

  • Может обновляться по мере развития Action Bar API.
  • Интегрированная поддержка Ancestral Navigation.
  • Использование каркасных классов Menu и MenuItem.
  • Продолжайте использовать класс фрагмента библиотеки поддержки.
  • Интегрированная поддержка ActionBarDrawerToggle для использования с DrawerLayout.
  • Backport of PopupMenu.

ActionBarSherlock - это надежная и проверенная библиотека, которая долгое время очень хорошо служила разработчикам. Если вы уже используете его и в настоящее время не требуете ни одного из перечисленных выше способов, переход на него не требуется.

ruidge
источник