Что является улучшением AppCompatActivity по сравнению с ActionBarActivity?


164

android.support.v7.app.AppCompatActivity был добавлен в последнюю версию библиотеки поддержки v7 как новая функция вчера.

Говорят, что ActionBarActivityон устарел в пользу нового AppCompatActivityи AppCompatActivityявляется базовым классом для действий, использующих функции панели действий библиотеки поддержки. Итак, что нового в AppCompatActivityболее чем ActionBarActivity? Какие улучшения AppCompatActivityимеют более ActionBarActivity? И в чем преимущества AppCompatActivity? Может ли кто-нибудь предоставить несколько образцов?

Любые советы приветствуются. И заранее спасибо.

PS: что меня больше всего удивило, так это то, AppCompatActivityчто от него android.support.v4.app.FragmentActivityявляется прямой родительский класс ActionBarActivity! Я имею в виду на самом деле сейчас, что ActionBarActivityможет сделать все, что AppCompatActivityможет, почему Android вытолкнул последний?

Между тем, я увидел сообщение в блоге, в котором говорится: « Это не переименование из ActionBarActivityв AppCompatActivity, внутренняя логика AppCompatдоступна черезAppCompatDelegate », так в чем же « внутренняя логика » AppCompat? Что можно AppCompatDelegateсделать? Может ли кто-нибудь опубликовать некоторые коды об этом?



Я прочитал это, это введение, слишком мелкое.
SilentKnight

1
AppCompatActivity является родительским классом ActionBarActivity. И для большей идеи вам нужно заглянуть в код.
Панкадж Кумар

Да, я это заметил.
SilentKnight

Ответы:


145

Как писал Крис, новая устаревшая версия ActionBarActivity(расширяющего AppCompatActivityкласс) безопасна для использования класса обратной совместимости. Его устаревание - просто подсказка для того, чтобы вы просили использовать новое AppCompatActivityнапрямую. AppCompatActivityэто новая, более общая реализация, которая использует AppCompatDelegateкласс внутри.

Если вы начинаете новую разработку, вам лучше сразу использовать новый AppCompatActivityкласс. Если у вас есть возможность обновить свое приложение, то замените также устаревшим ActionBarActivityновым действием. В противном случае вы можете остаться с устаревшей деятельностью, и в поведении не будет никакой разницы вообще.

Что касается AppCompatDelegate, это позволяет вам иметь новые тонированные виджеты в деятельности, которая не является AppCompatActivityни ActionBarActivity.

Например, вы наследуете действие от внешней библиотеки, которая, в свою очередь, не наследует, AppCompatActivityно вы хотите, чтобы у этого действия были виджеты (представления) с тонированными материалами. Чтобы это произошло, вам нужно создать экземпляр AppCompatDelegateвнутри вашей деятельности, переопределить методы этой активности, например addContentView()и setContentView()т. Д. ( AppCompatDelegateПолный список методов см. В javadoc), и внутри этих переопределенных методов переадресовать вызовы во внутренний AppCompatDelegateэкземпляр. AppCompatDelegateсделает все остальное, и ваша «старомодная» деятельность будет «материализована».


Хороший пример .. Спасибо @ sergej shafarenka
Ракеш Л

2
Можете ли вы сказать мне, что произойдет, когда я буду использовать Activity вместо Appcompactivity? Я искал, но не получил решение.
Пожалуйста,

35

В основном это смена имени: на ActionBarActivityсамом деле не описывает все, что делает сейчас. Вы можете безопасно использовать, ActionBarActivityесли хотите. Думайте об этом как символическая ссылка.


AppCompatActivityЯвляется ли прямой родительский класс ActionBarActivity, теперь, который ActionBarActivityможет делать все, что AppCompatActivityможет, почему Androidвытолкнул позже?
SilentKnight

4
@SilentKnight: Как писал Крис, в основном это смена имени. Цитирую блог разработчиков Android : «Библиотека поддержки AppCompat началась с скромного, но важного начала: единой последовательной панели действий для всех устройств API 7 и более поздних версий. В редакции 21 она взяла на себя новую ответственность: привнесение цветовой палитры материала, тонирование виджетов, Поддержка панели инструментов и многое другое для всех устройств API 7+. При этом имя ActionBarActivity на самом деле не охватывало всю сферу его деятельности ».
CommonsWare

3
Это не безопасно для использования устаревших классов, так как они подлежат удаление в версиях будущих. Несмотря на то, что вы можете легко заменить все ссылки, ActionBarActivityкогда он удаляется из библиотеки поддержки (например, при обновлении вашего приложения), я бы рекомендовал избегать его использования с этого момента.
david.schreiber

12

Библиотека поддержки AppCompat начиналась с скромного, но важного начала: единой последовательной панели действий для всех устройств API 7 и выше. В редакции 21 он взял на себя новую ответственность : привнесение цветовой палитры материала, тонирование виджетов, поддержка панели инструментов и многое другое на все устройства API 7+. При этом имя ActionBarActivity на самом деле не охватывало всю сферу его деятельности .

http://android-developers.blogspot.it/2015/04/android-support-library-221.html


Можете ли вы сказать мне, что произойдет, когда я буду использовать Activity вместо Appcompactivity? Я искал, но не получил решение.
Пожалуйста,

9

AppCompatActivityбыл введен в Android-SDK с момента выпуска библиотеки приложений для Android .

AppCompatActivityявляется прямым дочерним классом FragmentActivityподдержки v4 и прямым родительским классом ActionBarActivity.

AppCompatActivityявляется базовым классом для действий, использующих функции панели действий библиотеки поддержки .

Вы можете добавить ActionBarк своей деятельности при работе на уровне API 7 или выше , расширив этот класс для своей деятельности и задав тему темы для Theme.AppCompat или аналогичную тему.

Что касается поддержки библиотеки appcompat версии 7, в нее добавлена ​​поддержка шаблона проектирования пользовательского интерфейса Action Bar . Эта библиотека включает поддержку реализаций пользовательского интерфейса дизайна материалов .

Вот несколько ключевых классов, включенных в библиотеку appcompat v7:

  • ActionBar - Обеспечивает реализацию шаблона интерфейса пользователя панели действий.
  • AppCompatActivity- Добавляет класс активности приложения, который можно использовать в качестве базового класса для действий, использующих реализацию панели действий библиотеки поддержки .
  • AppCompatDialog- Добавляет класс диалога, который можно использовать в качестве базового класса для тематических диалогов AppCompat .
  • ShareActionProvider - Добавлена ​​поддержка стандартизированного действия по обмену (например, электронной почты или публикации в социальных приложениях), которое можно включить в панель действий.

После загрузки библиотек поддержки Android эта библиотека находится в каталоге / extras / android / support / v7 / appcompat / .


Как насчет android.support.v4.app.ActivityCompat? Это просто старое имя AppCompatActivity?
Тайлан

7

Раньше единственная точка входа AppCompatбыла через устаревший ActionBarActivityкласс. К сожалению, это заставило вас использовать установленную иерархию Activity, которая делала PreferenceActivityневозможным использование таких вещей .

см. chris banes's support-library-v22-1-0 для получения дополнительной информации


1
Это блог Криса, очень признателен.
SilentKnight

2

Последний выпуск андроид библиотеки поддержки, 22.1, уменьшает значимость ActionBarActivityв пользу AppCompatActivity, которая обещает принести один последовательный ActionBarдля всех устройств , начиная с API Level 7 и выше

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.