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

В чем разница между ActionBarSherlock и Совместимость панели действий

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

Пример: значок приложения для навигации вверх или вверх или ActionBar.Tab поддерживается в совместимости с Action Bar?

Ответ 1

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

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

- EDIT -

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

- EDIT -

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

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

Ответ 2

ActionBarSherlock vs ActionBarCompat:

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

ActionBarSherlock vs ActionBarCompat **strong text**

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

действия:

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

  • Замените SherlockFragmentActivity на ActionBarActivity.

  • Замените SherlockFragment на Fragment.

  • Измените ссылки Menu, MenuItem и getSupportMenuInflater(). Измените способ получения представлений действий.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  • Измените темы и стили.

Для получения дополнительной информации см. слайды +NickButcher (Google)

enter image description here

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

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

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

Вывод:

enter image description here

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

Ответ 3

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

UPDATE: как сказал @rudy-s, с новейшей библиотекой поддержки Android (api 18), я видел, что у них уже есть встроенная поддержка панели действий (класс ActionBarCompat).

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

App using compatibility library

App using sherlock library

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

App using compatibility on menu pressed

App using sherlock on menu pressed


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

UPDATE: как сказал @rudy-s, с новейшей библиотекой поддержки Android (api 18), я видел, что у них уже есть встроенная поддержка панели действий (так называемый класс ActionBarCompat).

Ответ 4

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

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

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

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

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

Ответ 5

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

ActionbarCompat Aproach

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

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

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

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

Точно так же, как партнер Шерлок делает различные реализации, но один для "Совлокальный", а другой - "Родной". Это заставляет вас распространяться либо от SherlockActivity, либо от SherlockFragmentActivity, потому что у этих двух базовых классов есть метод для отправки ActionBar.

Это большой и сложный проект, который не может быть объяснен в одном сообщении. Предложите, чтобы вы копали Sherlock Github repo, чтобы посмотреть и как Jeff Atwood говорит

enter image description here

Ответ 6

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

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

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

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

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

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

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

Ответ 7

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

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

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

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

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