Różnica między ActionBarSherlock a kompatybilnością ActionBar

Jaka jest różnica między ActionBarSherlock a Zgodność paska akcji

Kilka dni temu Google wypuściło ActionBar Compatibility, który sprawia, że jestem tak zdezorientowany. Czy zgodność Z Paskiem akcji działa tak samo jak ActionBarSherlock i czy kodowanie jest takie samo?

Przykład: czy ikona aplikacji do nawigacji " up " lub ActionBar.Karta obsługiwana w pasku akcji ?

Author: Nikola Despotoski, 2011-10-21

7 answers

ActionBarSherlock nadaje aplikacji pasek akcji niezależnie* od wersji interfejsu API Androida, na której aplikacja jest uruchamiana. Zgodność z paskiem akcji zapewnia pasek akcji tylko wtedy, gdy urządzenie, na którym pracujesz, ma poziom API 3.0 lub wyższy.

*zauważ, że jeśli urządzenie, na którym pracujesz, nie ma wersji 3.0 lub wyższej, ActionBarSherlock użyje własnej, niestandardowej implementacji paska akcji, a nie natywnej.

-- EDIT--

Wygląda na to, że rzeczy się zmieniły i w rzeczywistości nie ma już różnicy między ActionBarSherlock a zgodnością z paskiem akcji. Przeczytaj poniższe komentarze, aby uzyskać szczegółowe informacje.

-- EDIT--

Po użyciu obu obecnie mogę powiedzieć, że wolę ActionBarSherlock niż zgodność Z Paskiem akcji. ActionBarSherlock jest naprawdę łatwy i przyjemny w użyciu.

-- edytuj-- Jak wspomniano w LOG_TAG, w Bibliotece wsparcia dla Androida jest teraz wsparcie dla paska akcji. Nie miałem jeszcze okazji go użyć, ale chciałbym wyobraź sobie, że jest najlepszy w użyciu.

 61
Author: Kurtis Nusbaum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-26 10:04:48

ActionBarSherlock vs ActionBarCompat:

Chcę tylko umieścić kilka różnic w kodzie pomiędzy ActionBarSherlock a ActionBarCompat Lib

ActionBarSherlock vs ActionBarCompat * * silny tekst**

Możemy przenieść niektóre aplikacje z ActionBarSherlock do ActionBarCompat:

Kroki:

  1. Import AppCompat projekt.

  2. Zastąp SherlockFragmentActivity Z ActionBarActivity.

  3. Zastąp SherlockFragment Z Fragment.

  4. Zmień Menu, MenuItem oraz getSupportMenuInflater() referencje. Zmodyfikuj sposób uzyskiwania widoków akcji.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. zmodyfikuj swoje motywy i Style .

Aby uzyskać więcej informacji, zapoznaj się z tym slajdami przez + NickButcher (Google)

Tutaj wpisz opis obrazka

Dzięki źródłom: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Nie zapomnij przeczytać tego dewelopera.android więcej o ABC!

Uwaga: ustawienie go do testów jednostkowych w taki sam sposób jak ABS nie jest niestety możliwe dzięki bibliotece wsparcia.

Wyjście:

Tutaj wpisz opis obrazka

Napisy: Gabriele Mariotti

 113
Author: LOG_TAG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-03 06:50:54

Właśnie uzupełniam to, co @Kurtis Nusbaum z praktycznym przykładem.

UPDATE: jak powiedział @ rudy - s, z najnowszą biblioteką wsparcia dla Androida (api 18), widziałem, że mają już wbudowaną obsługę actionbar (o nazwie Klasa ActionBarCompat).

Zbudowałem dwie proste aplikacje, aby pokazać wizualną różnicę między ActionBarSherlock i kompatybilnością ActionBar. Zobacz zdjęcia porównawcze:

Aplikacja korzystająca z biblioteki kompatybilności

Aplikacja korzystająca z biblioteki Sherlocka

Teraz wygląd, gdy przycisk menu jest wciśnięty:

Aplikacja korzystająca z kompatybilności na wciśniętym menu

Aplikacja za pomocą przycisku Menu


Jak widzisz, obrazy tylko wymuszają to, co zostało powiedziane. zgodność Z Paskiem akcji zapewnia pasek akcji tylko wtedy, gdy urządzenie, na którym pracujesz, ma poziom API 3.0 lub wyższy. Podczas gdy Sherlock jest bardziej ogólny.

Poniżej możesz zobaczyć źródło aplikacji.

Plik XML menu jest taki sam:

<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>

Aktywność kompatybilności:

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;
     }
}

Aktywność Sherlocka:

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);
    }

}

Dodatkowy konfiguracja była konieczna w aplikacji sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">

UPDATE: jak powiedział @ rudy - s, z najnowszą biblioteką wsparcia dla Androida (api 18), widziałem, że mają już wbudowane wsparcie dla actionbar (o nazwie Klasa ActionBarCompat).

 41
Author: Bruno Mateus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-30 13:46:49

Actionbar Sherlock jest znacznie bardziej zaawansowany i ambitniejszy niż prosty projekt zgodności Actionbar.

Zgodność Z Paskiem akcji można uznać za" próbkę " lub dobry punkt wyjścia, jeśli chcesz tylko uderzyć pasek akcji na górze aplikacji.

ActionBarSherlock opiera się na bibliotece zgodności i udostępnia (podobnie jak przykład zgodności paska akcji) pasek akcji na urządzeniach przed wersją 3.0. Dodatkowo posiada dodatkowe funkcje nie występujące w pasku czynności Kod kompat. Obejmuje to funkcje takie jak, ale nie ograniczając się do

  • setNavigationMode (dla tabulatorów i spinnerów na pasku akcji)
  • Fragmenty Dialogów
  • kontekstowy pasek akcji (CAB) menu, które przejmuje pasek akcji, używane na przykład dla multi select (http://developer.android.com/design/patterns/new-4-0.html) jest to funkcja ICS (!) W tym celu do ActionbarSherlock musiała zostać wprowadzona Implementacja klasy ActionMode (wprowadzona w API na poziomie 11) biblioteka
  • implementacje Fragment i FragmentActivity - ponieważ fragmenty mogą zaimplementować menu onCreateOptions, musimy upewnić się, że SupportMenuInflater jest używany.
  • dwa tematy niezbyt podobne do Holo.Dark i Holo.Światło (Theme.Sherlock, Temat.Sherlock.Light)
  • funkcja ICS "split action bar"

Jedynym minusem, jaki widzę w użyciu ActionbarSherlock jest to, że zamykasz się w tej bibliotece. Jeśli z jakiegoś powodu wygaśnie w niedalekiej przyszłości, będziesz musiał go utrzymywać samodzielnie(na przykład, jeśli nie pojawi się Żadna implementacja Jellybean). Jest to kłopotliwe (nie ogromny problem), ponieważ wszystkie fragmenty rozszerza SherlockFragemnt i wszystkie swoje działania. Sherlock.

 39
Author: Glenn Bech,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-24 08:14:04

Well @Jake implementacja idzie znacznie dalej niż to, co Actionbar compat, mówiąc dokładniej ActionBar Compat jest tylko podstawowym przykładem na to, jak można obsługiwać wszystkie aplikacje za pomocą pseudo-actionbar dla wydań wcześniejszych z Honeycomb (API 13). Chociaż ich celem jest ten sam krzyżowy Pasek działania, mają różne podejście.

ActionbarCompat Aproach

Ta implementacja nie korzysta z kompatybilnej biblioteki wsparcia dla Androida, zamiast tego tworzy bazę Klasa o nazwie ActionBarActivity tworzy pojedynczą instancję Helper Ten helper działa jak sama fabryka, która zwraca różne implementacje dla trzech segmentów API, zwraca

Najciekawsza część znajduje się w ActionbarBaseHelper , ponieważ ma najważniejszy kod, proponuję zrozumieć tę klasę, a otrzymasz cały przykład.

Action Bar Sherlock

Cóż to jest trudne na początku, ponieważ, nie jestem autorem może Jake może wyjaśnić to dalej, ale spróbuję.

Podobnie jak implementacja compat jest różna, ale jedna jest dla" Compat", a druga jest natywna. Zmusza cię do rozszerzenia albo z Sherlockfragmentactivity albo z SherlockFragmentActivity, ponieważ te dwa klasy bazowe mają metodę wysyłania paska akcji.

Jest to duży i złożony projekt, którego nie da się wyjaśnić w jednym poście. Zasugeruj, aby kopać wokół Sherlock Github repo chwyć spojrzenie i jak Jeff Atwood mówi

Tutaj wpisz opis obrazka

 25
Author: Necronet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 22:15:24
  • Mocno wierzę, że należy używać ActionBarCompat dla wszystkich nowych projekty, które chcą obsługiwać starsze urządzenia.

  • Może też mieć sens migracja istniejących projektów. Więc czytaj dalej dowiedz się, dlaczego powinieneś natychmiast migrować lub korzystać z ActionBarCompat i jak przenieść istniejące projekty.

Dlaczego wolisz ActionBarCompat niż ActionBarSherlock?

Istnieje wiele powodów, dla których powinieneś preferować ActionbarCompat niż ActionbarSherlock.

  1. Przede wszystkim ten projekt jest przez Google, jest częścią wsparcia Biblioteki, a tym samym prawdopodobnie będzie obsługiwać nowe rzeczy związane z paskiem akcji w W Tym Samym Czasie Google wypuszcza je z zapasowym Androidem.

  2. Innym dobrym powodem jest to, że obsługuje Navigation Drawer pattern zaraz po wyjęciu z pudełka, podczas gdy ActionBarSherlock nie. Tak więc jeśli chcesz dodać tę szufladę do istniejącego projektu / aplikacji, powinieneś migrować.

  3. Ostatnim i ważnym jest to, że twórca ActionBarSherlock, Jake Wharton, ogłosił na Google+, że dalszy rozwój ActionBarSherlock został zatrzymany. ActionBarSherlock 4.4 jest ostatnia wersja i może dostać poprawki błędów-ale nie będzie żadnych nowych cechy: więc jeśli nowa funkcjonalność jest dołączona do actionbar, możesz nie nadążaj za tym z actionbarsherlock.

 10
Author: Luffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-07 08:50:12

Może powinniśmy zaktualizować odpowiedź, ponieważ google opublikowało oficjalne wsparcie Actionbar od API18?

Blok poniżej pochodzi z oficjalnego bloga o tych dwóch bibliotekach:

Jeśli używasz rozwiązania innej firmy (takiego jak ActionBarSherlock), istnieje kilka powodów, aby rozważyć aktualizację:]}
  • mogą być aktualizowane w miarę rozwoju interfejsu API paska akcji.
  • zintegrowana obsługa nawigacji przodków.
  • użycie menu framework i Zajęcia MenuItem.
  • kontynuuj używanie klasy Fragmentowej biblioteki wsparcia.
  • Zintegrowane wsparcie dla ActionBarDrawerToggle do użytku z szuflady.
  • Backport PopupMenu.

ActionBarSherlock jest solidną i dobrze przetestowaną biblioteką, która od dawna bardzo dobrze służy programistom. Jeśli już go używasz i obecnie nie potrzebujesz żadnego z powyższych, nie ma potrzeby migracji.

 7
Author: ruidge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-27 08:40:30