У чому поліпшення 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()тощо (див. AppCompatDelegateJavadoc для повного списку методів), а всередині цих перекритих методів переадресує виклики до внутрішнього AppCompatDelegateпримірника. AppCompatDelegateзробить все інше, і ваша "стара мода" діяльність буде "матеріалізована".


Хороший приклад .. Дякую @ sergej shafarenka
Ракеш L

2
Чи можете ви мені скажіть, що станеться, коли я буду використовувати Діяльність замість програми? Я шукав, але не
знайшов

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


..Чи можете, будь ласка, скажіть мені, що станеться, коли я буду використовувати Діяльність замість Appcompactivity? Я шукав, але не
знайшов

9

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

AppCompatActivityє прямим дочірнім класом FragmentActivityпідтримки v4 та прямим батьківським класом ActionBarActivity.

AppCompatActivityє базовим класом для діяльності, яка використовує функції панелі дій підтримки бібліотеки .

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

Що стосується підтримки v7 AppCompat бібліотеки, він додає підтримку панелі дій призначеного для користувача інтерфейсу шаблону проектування. Ця бібліотека включає підтримку реалізацій користувальницького інтерфейсу для дизайну матеріалів .

Ось кілька ключових класів, включених до бібліотеки додатків v7:

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

Після завантаження бібліотек підтримки Android ця бібліотека знаходиться в каталозі / extras / android / support / v7 / appcompat / .


Про що android.support.v4.app.ActivityCompat? Це лише стара назва AppCompatActivity?
Тейлан

7

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

Додаткову інформацію див. у бібліотеках підтримки Chris Banes-v22-1-0


1
Це блог Кріса, дуже вдячний.
SilentKnight

2

В останньому випуску бібліотеки підтримки для Android, 22.1, застаріла ActionBarActivityприхильність AppCompatActivity, яка обіцяє представити єдину послідовність ActionBarдля всіх пристроїв, починаючи з API рівня 7 і вище

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