Jakie jest ulepszenie AppCompatActivity w stosunku do ActionBarActivity?

164

android.support.v7.app.AppCompatActivity został wczoraj dodany do najnowszej biblioteki obsługi wersji 7 jako nowa funkcja.

Mówi się, że ActionBarActivityzostała wycofana na korzyść nowej AppCompatActivityi AppCompatActivityjest to klasa bazowa dla działań korzystających z funkcji paska akcji biblioteki obsługi. Więc jakie są nowe funkcje AppCompatActivityOver ActionBarActivity? Jakie ulepszenia AppCompatActivityjuż się skończyły ActionBarActivity? A jakie są zalety AppCompatActivity? Czy ktoś mógłby dostarczyć kilka próbek?

Wszelkie wskazówki są mile widziane. Z góry dziękuję.

PS: to, co mnie najbardziej zaskoczyło, to to, AppCompatActivityco się rozszerzyło, android.support.v4.app.FragmentActivityto bezpośrednia klasa macierzysta ActionBarActivity! Mam na myśli to, że teraz, który ActionBarActivitymoże zrobić wszystko, co AppCompatActivitymoże, dlaczego Android wypchnął to drugie?

W międzyczasie zobaczyłem post na blogu, w którym napisano: „ To nie jest zmiana nazwy z ActionBarActivityna AppCompatActivity, wewnętrzna logika AppCompatjest dostępna za pośrednictwemAppCompatDelegate ”, więc jaka jest „ wewnętrzna logikaAppCompat? Co mogę AppCompatDelegatezrobić? Czy ktoś mógłby opublikować jakieś kody na ten temat?

SilentKnight
źródło
Przeczytałem, to wstęp, zbyt płytki.
SilentKnight
1
AppCompatActivity jest klasą nadrzędną ActionBarActivity. Aby uzyskać więcej pomysłów, musisz zajrzeć do kodu.
Pankaj Kumar
Tak, zauważyłem to.
SilentKnight

Odpowiedzi:

145

Jak napisał Chris, nowa przestarzała wersja ActionBarActivity(ta, która rozszerzyła AppCompatActivityklasę) jest bezpieczną w użyciu klasą kompatybilności wstecznej. Jego wycofanie jest tylko wskazówką, że AppCompatActivityzamiast tego możesz bezpośrednio użyć nowego . AppCompatActivityjest nową, bardziej ogólną implementacją, która używa AppCompatDelegateklasy wewnętrznie.

Jeśli zaczynasz nowy rozwój, powinieneś raczej AppCompatActivityod razu użyć nowej klasy. Jeśli masz szansę zaktualizować aplikację, zastąp ActionBarActivityją również nową aktywnością. W przeciwnym razie możesz pozostać przy przestarzałej aktywności i nie będzie żadnej różnicy w zachowaniu.

Odnośnie AppCompatDelegate, pozwala ci mieć nowe przyciemniane widżety w działaniu, które nie jest AppCompatActivityani ActionBarActivity.

Na przykład, dziedziczysz działanie z biblioteki zewnętrznej, która z kolei nie dziedziczy, AppCompatActivityale chcesz, aby to działanie miało widżety (widoki) materiałów przyciemnionych. Aby tak się stało trzeba utworzyć instancję AppCompatDelegatewewnątrz swojej działalności, metod nadpisywania takiej działalności jak addContentView(), setContentView()itp (patrz AppCompatDelegatejavadoc dla pełnego wykazu metod), a wewnątrz tych przesłoniętych metody przekazania połączenia do wewnętrznej AppCompatDelegateinstancji. AppCompatDelegatezajmie się resztą, a Twoja „staromodna” działalność zostanie „zmaterializowana”.

sergej shafarenka
źródło
Dobry przykład .. Dziękuję @ sergej shafarenka
Rakesh L
2
Czy możesz mi powiedzieć, co się stanie, gdy użyję Aktywności zamiast Kompaktowości aplikacji? Szukałem, ale nie
znalazłem
35

To głównie zmiana nazwy: ActionBarActivitytak naprawdę nie opisuje wszystkiego, co teraz robi. Możesz bezpiecznie używać, ActionBarActivityjeśli chcesz. Pomyśl o tym jak o dowiązaniu symbolicznym.

Chris Banes
źródło
AppCompatActivityto jest bezpośrednia klasa rodzicielska ActionBarActivity, która teraz ActionBarActivitymoże zrobić wszystko, co AppCompatActivitymoże, dlaczego Androidwypchnięto później?
SilentKnight
4
@SilentKnight: Jak napisał Chris, jest to głównie zmiana imienia. Cytując blog deweloperów Androida : „Biblioteka pomocy technicznej AppCompat zaczęła się od skromnych, ale ważnych początków: jeden spójny pasek akcji dla wszystkich urządzeń z interfejsem API 7 i nowszych. W wersji 21 przyjęto nową odpowiedzialność: wprowadzenie palety kolorów materiałów, przyciemnianie widżetów, Obsługa pasków narzędzi i nie tylko dla wszystkich urządzeń z interfejsem API 7+. Dzięki temu nazwa ActionBarActivity nie obejmowała tak naprawdę pełnego zakresu tego, co naprawdę robiła ”.
CommonsWare
3
Używanie przestarzałych klas nie jest bezpieczne , ponieważ będą one podlegać usunięciu w przyszłych wersjach. Chociaż możesz łatwo zastąpić wszystkie odniesienia do ActionBarActivitymomentu, w którym zostanie usunięty z biblioteki pomocy technicznej (np. Podczas aktualizacji aplikacji), od tej pory zalecamy unikanie korzystania z niego.
david.schreiber
12

Biblioteka wsparcia AppCompat zaczęła się od skromnych, ale ważnych początków: jeden spójny pasek akcji dla wszystkich urządzeń z interfejsem API 7 i nowszych. W wersji 21 przejął on nową odpowiedzialność : wprowadzając paletę kolorów materiałów, przyciemnianie widgetów, obsługę paska narzędzi i nie tylko na wszystkie urządzenia z interfejsem API 7+. W związku z tym nazwa ActionBarActivity tak naprawdę nie obejmowała pełnego zakresu tego, co naprawdę robiła .

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

AndroidGecko
źródło
..Czy możesz mi powiedzieć, co się stanie, gdy użyję Aktywności zamiast Kompaktowości aplikacji? Szukałem, ale nie
znalazłem
9

AppCompatActivityzostał wprowadzony do Android-SDK od czasu wydania biblioteki appcompat obsługującej Androida .

AppCompatActivityjest bezpośrednią klasą FragmentActivitypotomną wsparcia v4 i bezpośrednią klasą nadrzędną ActionBarActivity.

AppCompatActivityjest klasą bazową dla działań korzystających z paska akcji biblioteki obsługi funkcji .

Możesz dodać an ActionBardo swojego działania, gdy działa na poziomie API 7 lub wyższym , rozszerzając tę ​​klasę dla swojego działania i ustawiając motyw działania na Theme.AppCompat lub podobny motyw.

Jeśli chodzi o obsługę biblioteki appcompat w wersji 7, dodaje ona obsługę wzorca projektowania interfejsu użytkownika paska akcji . Ta biblioteka zawiera obsługę projektowania materiałów implementacji interfejsu użytkownika .

Oto kilka kluczowych klas zawartych w bibliotece appcompat w wersji 7:

  • ActionBar - Zapewnia implementację wzorca interfejsu użytkownika paska akcji.
  • AppCompatActivity- Dodaje klasę działania aplikacji, która może być używana jako klasa bazowa dla działań korzystających z implementacji paska akcji Support Library .
  • AppCompatDialog- Dodaje klasę okna dialogowego, która może być używana jako klasa bazowa dla okien dialogowych o tematyce AppCompat .
  • ShareActionProvider - Dodaje obsługę znormalizowanej akcji udostępniania (takiej jak e-mail lub publikowanie w aplikacjach społecznościowych), którą można uwzględnić na pasku akcji.

Po pobraniu bibliotek obsługi systemu Android biblioteka ta znajduje się w katalogu / extras / android / support / v7 / appcompat / .

SilentKnight
źródło
O co chodzi android.support.v4.app.ActivityCompat? Czy to tylko stara nazwa AppCompatActivity?
Taylan
7

Wcześniej jedynym punktem wejścia do programu AppCompatbyła przestarzała ActionBarActivityklasa. Niestety to zmusiło cię do korzystania z ustalonej hierarchii działań, co uniemożliwiało takie rzeczy jak używanie PreferenceActivity.

zobacz Chris Banes męska support-biblioteki-v22-1-0 aby uzyskać więcej informacji

pusty wskaźnik
źródło
1
To bardzo ceniony blog Chrisa.
SilentKnight
2

Najnowsza wersja biblioteki obsługi Androida, 22.1, wycofuje się ActionBarActivityna korzyść AppCompatActivity, co obiecuje zapewnić jednolity spójny ActionBardla wszystkich urządzeń począwszy od poziomu API 7 i nowszych

Arpit Gandhi
źródło