Diferença entre ActionBarSherlock e ActionBar Compatibilidade

156

Qual é a diferença entre ActionBarSherlock e Action Bar Compatibility

Poucos dias atrás, o Google lançou a Compatibilidade ActionBar que me deixa tão confusa. A Compatibilidade da Barra de Ação funciona da mesma forma que o ActionBarSherlock e a codificação é a mesma?

Exemplo: O ícone do aplicativo para navegar "para cima" ou o ActionBar.Tab é compatível com a Compatibilidade da barra de ação?

xDragonZ
fonte
12
FYI eu escrevi um post sobre isso para o blog eng da Square: corner.squareup.com/2012/05/actionbarsherlock-as-a-base.html
Jake Wharton
3
youtube.com/… É isso que o Google pensa sobre ActionBarSherlock vs ActionBarCompact
Rolf #
Esse é um encadeamento importante e útil para quem deseja migrar do ABS para o ABCompat. Obrigado.
Ashokchakravarthi Nagarajan

Respostas:

61

O ActionBarSherlock fornece ao seu aplicativo uma barra de ação, independentemente * da versão da API do Android em que seu aplicativo está sendo executado. A Compatibilidade da barra de ação fornece a barra de ação apenas se o dispositivo em que você está executando for de nível de API 3.0 ou superior.

* Observe que, se o dispositivo em que você está executando não for 3.0 ou superior, o ActionBarSherlock usará sua própria implementação personalizada da barra de ação, não uma nativa.

--EDITAR--

Parece que as coisas mudaram e, na verdade, não há mais diferença entre o ActionBarSherlock e a Compatibilidade da Barra de Ação. Por favor, leia os comentários abaixo para obter detalhes.

--EDITAR--

Depois de ter usado os dois agora, posso dizer que realmente prefiro o ActionBarSherlock à Compatibilidade da barra de ação. ActionBarSherlock é realmente fácil e agradável de usar.

--EDIT-- Como LOG_TAG mencionou, agora há suporte para a barra de ação na Biblioteca de suporte do Android. Ainda não tive chance de usá-lo, mas imagino que seja o melhor para usar.

Kurtis Nusbaum
fonte
1
@ Anidamo Obrigado pela atenção. Eu posso estar enlouquecendo, mas posso jurar que, em um ponto, a versão no pacote de compatibilidade com o Android não deu uma se você precisasse da versão 3.0. Eu modifiquei minha resposta.
Kurtis Nusbaum
35
Além disso, a resposta está totalmente errada - o objetivo do exemplo de compatibilidade é oferecer suporte a dispositivos anteriores à 3.0.
AlikElzin-kilaka
8
O Google lançou uma nova implementação da Action Bar compatível com versões anteriores, chamada ActionBarCompat, que faz parte da Biblioteca de suporte r18. As APIs do ActionBarCompat permitem criar o padrão de design essencial da Barra de Ação no seu aplicativo, com ampla compatibilidade com o Android 2.1.
LOG_TAG 12/08
3
Após ligação lhe diz whye howpara usar a nova API ActionBarCompat, android-developers.blogspot.in/2013/08/...
Venom
2
Apenas para adicionar, para aqueles que pensam que desejam a integração do Chromecast em seus aplicativos, eu recomendo o uso da biblioteca de appcompat. As APIs do MediaRouter necessárias para a integração do Chromecast dependem do appcompat; ActionBarSherlock não pode ser usado.
clu
113

ActionBarSherlock vs ActionBarCompat:

Eu só quero colocar algumas diferenças de código entre ActionBarSherlock vs ActionBarCompat Lib

 ActionBarSherlock vs ActionBarCompat ** texto forte **

Podemos migrar alguns aplicativos do ActionBarSherlock para o ActionBarCompat:

passos:

  1. Importe o projeto AppCompat .

  2. Substituir SherlockFragmentActivity por ActionBarActivity.

  3. Substituir SherlockFragment por Fragment.

  4. Change Menu,MenuItem e getSupportMenuInflater()referências. Modifique a maneira como você obtém as visualizações de ação.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Modifique seu temas e estilos .

Para mais informações, consulte os slides de + NickButcher (Google)

insira a descrição da imagem aqui

Agradecimentos às fontes: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Não se esqueça de ler este developer.android para saber mais sobre o ABC!

Nota: Infelizmente, não é possível configurá-lo para testes de unidade da mesma maneira que o ABS na biblioteca de suporte.

Resultado:

insira a descrição da imagem aqui

Créditos: Gabriele Mariotti

LOG_TAG
fonte
1
Apenas uma atualização de que o ABS agora também pode ser adicionado aos projetos Gradle compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'e não precisa ser um projeto de biblioteca.
precisa saber é
Obrigado pela explicação detalhada
Biswajit Das
41

Acabei de completar o que @Kurtis Nusbaum com um exemplo prático.

ATUALIZAÇÃO: como o @ rudy-s disse, com a mais recente biblioteca de suporte ao Android (api 18), vi que eles já têm suporte interno para a actionbar (chamada classe ActionBarCompat).

Criei dois aplicativos simples para mostrar a diferença visual entre o ActionBarSherlock e o ActionBar Compatibility. Veja as imagens comparativas:

Aplicativo usando a biblioteca de compatibilidade

Aplicativo usando a biblioteca sherlock

Agora, a aparência quando o botão de menu é pressionado:

Aplicativo usando compatibilidade no menu pressionado

App usando sherlock no menu pressionado


Como você pode ver, as imagens apenas reforçam o que foi dito. A Compatibilidade da barra de ação fornece a barra de ação apenas se o dispositivo em que você está executando for de nível de API 3.0 ou superior. Enquanto Sherlock é mais geral.

Abaixo você pode ver a fonte do aplicativo.

O arquivo xml do menu é o mesmo:

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

Atividade de compatibilidade:

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

Atividade de Sherlock:

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

}

Uma configuração adicional foi necessária no aplicativo sherlock:

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

ATUALIZAÇÃO: como o @ rudy-s disse, com a mais recente biblioteca de suporte ao Android (api 18), vi que eles já têm suporte interno para a actionbar (chamada classe ActionBarCompat).

Bruno Mateus
fonte
5
Na verdade, isso não está totalmente correto. A biblioteca Compat pode e fornece uma implementação ActionBar no Gingerbread. Este aplicativo, por exemplo, fornece um AB no GB e não usa Sherlock, mas Compat. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid
Não há necessidade, se você extrair essa amostra do actionbarcompat (por exemplo, do android-17 sdk) e compilar no ADT, ele será executado em um dispositivo GB com uma ActionBar. Eu mesmo testei para confirmar em um Desire HD com 2.3.5.
Hamid
OK, entendi. No entanto, o ActionBarSherlock fornece mais recursos, não é?
Bruno Mateus
2
Com a mais recente biblioteca de suporte para Android (api 18), vi que eles já têm suporte interno para a actionbar (chamada classe ActionBarCompat).
Rudy s
GingerBEARD? Adoro.
Carlos P
39

Actionbar Sherlock é muito mais avançado e muito mais ambicioso do que o simples projeto de compatibilidade do Actionbar.

A compatibilidade da barra de ação pode ser considerada uma "amostra" ou um bom ponto de partida se você quiser apenas bater uma barra de ação na parte superior do seu aplicativo.

O ActionBarSherlock baseia-se na biblioteca de compatibilidade e fornece (como o exemplo de compatibilidade da barra de ação) uma Barra de Ação em dispositivos anteriores à 3.0. Além disso, possui recursos extras não presentes no código Compatível com o ActionBar. Isso inclui recursos como, entre outros,

  • setNavigationMode (para guias e giradores na barra de ação)
  • Fragmentos de Diálogo
  • Barra de ação contextual (CAB), um menu que assume a barra de ação, usado, por exemplo, para seleção múltipla (http://developer.android.com/design/patterns/new-4-0.html) Esse é um recurso do ICS ( !) Para isso, uma implementação da classe ActionMode (introduzida na API nível 11) teve que ser introduzida na biblioteca ActionbarSherlock
  • Implementações Fragment e FragmentActivity - como os fragmentos podem implementar o menu onCreateOptions, precisamos garantir que o SupportMenuInflater seja usado.
  • Dois temas não muito diferentes do Holo.Dark e Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
  • O recurso ICS "barra de ação dividida"

A única desvantagem que vejo ao usar o ActionbarSherlock é que você se trava nessa biblioteca. Se, por algum motivo, ele desaparecer no futuro próximo, você precisará mantê-lo (por exemplo, se nenhuma implementação do Jellybean aparecer). Isso é um aborrecimento (não é um grande problema), pois todos os seus fragmentos estendem o SherlockFragemnt e todas as suas atividades. SherlockActivity.

Glenn Bech
fonte
Estou esquecendo de algo? Parece que vários SELECT não é apoiar em ABS
jiduvah
1
Desculpe o atraso. A seleção múltipla não é, por si só, suportada pelo ABS. Mas você pode implementar o Multiselect usando o ABS "ActionMode", pois o ABS tem suas próprias implementações das classes ActionMode. Quando vai para "Multi modo de seleção", você iria definir o modo de escolha do ListView para CHOICE_MODE_MULTIPLE, e invocar ActionMode chamando getSherlockActivity () startActionMode (callback).
Glenn Bech
26

Bem, a implementação do @Jake vai muito além do que o compatível com o Actionbar, para ser mais preciso, o Actionbar Compat é apenas um exemplo básico de como você pode suportar todas as aplicações com uma pseudo-actionbar para lançamentos anteriores ao Honeycomb (API 13). Embora seu alvo seja a mesma barra de ação compatível com eles, eles têm uma abordagem diferente.

ActionbarCompat Aproach

Essa implementação não utiliza a biblioteca de suporte do Compatibility Android, mas cria uma classe base chamada ActionBarActivity, cria uma única instância de um Helper, esse auxiliar atua como a própria fábrica que retorna uma implementação diferente para os três segmentos do APIS, retorna

A parte mais interessante está no ActionbarBaseHelper , porque possui o código mais importante, sugiro que você entenda essa classe e obterá o exemplo inteiro.

Barra de ação Sherlock

Bem, isso é complicado de se iniciar, porque, eu não sou o autor, talvez Jake possa explicar mais sobre isso, mas vou tentar.

Assim como o compat Sherlock faz uma implementação diferente, mas um é para "Compat" e o outro é nativo. Isso força você a se estender de SherlockActivity ou de SherlockFragmentActivity, porque essas duas classes base têm o método para despachar a ActionBar.

Este é um projeto grande e complexo, que não pode ser explicado em um único post. Sugiro que você procure o repositório Sherlock Github e dê uma olhada e, como Jeff Atwood diz

insira a descrição da imagem aqui

Necronet
fonte
10
  • Eu acredito fortemente que você deve usar ActionBarCompatpara todos os novos projetos que desejam oferecer suporte a dispositivos mais antigos.

  • Também pode fazer sentido migrar projetos existentes. Portanto, continue lendo para saber por que você deve migrar ou usar o ActionBarCompat imediatamente e como migrar projetos existentes.

Por que você deve preferir o ActionBarCompat ao ActionBarSherlock?

Há muitas razões pelas quais você deve preferir o ActionbarCompat ao ActionbarSherlock.

  1. Antes de tudo, esse projeto é do Google, faz parte da Biblioteca de suporte e, portanto, provavelmente oferecerá suporte a novos itens relacionados à Action Bar ao mesmo tempo em que o Google os libera com o Android padrão.

  2. Outro bom motivo é que ele oferece suporte Navigation Drawer patternimediato, enquanto o ActionBarSherlock não. Portanto, se você deseja adicionar essa gaveta a um projeto / aplicativo existente, deve migrar.

  3. A última e importante é que o criador da ActionBarSherlock, Jake Wharton, anunciou no Google+ que o desenvolvimento adicional da ActionBarSherlock foi interrompido. O ActionBarSherlock 4.4 é a última versão e pode receber correções de bugs - mas não haverá novos recursos: portanto, se uma nova funcionalidade estiver incluída na actionbar, você não poderá acompanhá-la com o actionbarsherlock.

Steve
fonte
7

Talvez devêssemos atualizar a resposta porque o Google publicou o suporte oficial da Actionbar desde API18 ?

O bloco abaixo é do blog oficial sobre essas duas bibliotecas:

Se você estiver usando uma solução de terceiros (como ActionBarSherlock), há alguns motivos para considerar a atualização:

  • Pode ser mantido atualizado à medida que a API da barra de ação evolui.
  • Suporte integrado à Navegação Ancestral.
  • Uso das classes Menu e MenuItem da estrutura.
  • Continue usando a classe Fragment da Biblioteca de Suporte.
  • Suporte integrado para ActionBarDrawerToggle para uso com DrawerLayout.
  • Suporte de PopupMenu.

O ActionBarSherlock é uma biblioteca sólida e bem testada que atende muito bem a desenvolvedores há muito tempo. Se você já o está usando e não exige nenhuma das opções acima, não há necessidade de migrar.

Ruidge
fonte