quarta-feira, 31 de julho de 2013

ActionBar na API de Compatibilidade

Olá povo,

No último 18/07 a Google finalmente adicionou o suporte à ActionBar na API de compatibilidade. Pelo menos para API v7 (Android 2.1 ou superior). Para usá-la, vá até o SDK Manager e atualize a API de compatibilidade marcando a opção Extras > Android Support Library.



Feito isso, vá até o Eclipse e importe o projeto appcompat disponível no diretório SDK_DIR/extras/android/support/v7. Crie um novo projeto e referencie o projeto importado anteriormente clicando com o botão direito sobre o projeto e selecionando Properties.  Em seguida, selecione a opção Android no lado esquerdo e na parte inferior, clique em Add. Selecione o projeto android-support-v7-appcompat. Agora apague o arquivo android-support-v4.jar da pasta lib do projeto, pois o projeto que acabamos de importar já tem esse arquivo.

Nossa Activity agora herdará ActionBarActivity (que herda de FragmentActivity).
import android.support.v7.app.ActionBarActivity;

public class MainActivity extends ActionBarActivity {
  // Implementação normal da Activity
}

Obrigatoriamente, nossa Activity tem que ter o estilo da R.style.Theme.AppCompat. Para tal, vá até o arquivo values/styles.xml e modifique o tema da aplicação conforme abaixo.

<style name="AppBaseTheme" 
  parent="@style/Theme.AppCompat">

Pronto! Agora é só usar a ActionBar como se estivesse no Android 3.0 ou superior :)

EDITADO em 05/08/2013

Para usar a SearchView nesse nova biblioteca, adicione o arquivo res/menu/main.xml.
<menu 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:suaapp="http://schemas.android.com/apk/res-auto">

  <item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="always|withText"
    android:icon="@android:drawable/ic_menu_info_details"
    android:title="@string/action_settings"/>

  <item android:id="@+id/search"
    android:title="Search"
    android:icon="@android:drawable/ic_menu_search"
    suaapp:showAsAction="collapseActionView|ifRoom"
    suaapp:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
Agora deixe o código da sua Activity como abaixo:
public class MainActivity extends ActionBarActivity 
  implements SearchView.OnQueryTextListener {

  private MenuItem mSearchItem;
  private SearchView mSearchView;
  private TextView mTextTeste;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mTextTeste =
     (TextView)findViewById(R.id.textView1);
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
  
    mSearchItem = menu.findItem(R.id.search); 
    mSearchView = (SearchView) 
      MenuItemCompat.getActionView(mSearchItem); 
    mSearchView.setOnQueryTextListener(this);
  
    return true;
  }

  @Override
  public boolean onQueryTextChange(String text) {
    mTextTeste.setText(text);
    return false;
  }

  @Override
  public boolean onQueryTextSubmit(String text) {
    mTextTeste.setText(text +" GO!");
    MenuItemCompat.collapseActionView(mSearchItem);
    return true;
  }
}


4br4ç05,
nglauber

12 comentários:

Diego Nascimento disse...

aew \o/. uma lib a menos nos projetos (sherlok)

Unknown disse...

Show de bola funcionou perfeitamente....
nesse link no android developer, da outros passos, por exemplo adicionar campo de pesquisa e etc.
http://developer.android.com/guide/topics/ui/actionbar.html

Nelson Glauber de Vasconcelos Leal disse...

Oi Anônimo,

Editei o post para adicionar a SearchView.

Thanks for your comment!

4br4ç05,
nglauber

Claudio Cabral disse...

Muito bom, atendeu exatamente o que eu precisava.

Valeu!!

Adriano Sales disse...

Excelente post Nelson! Parabéns e obrigado por compartilhar! :)

Idéia Informática Ltda. disse...

Não encontra R.id.search. O que uso no lugar?

Idéia Informática Ltda. disse...

Já descobri, obrigado

Idéia Informática Ltda. disse...

Não deu certo, o aplicativo parou ao entrar
Não pode ter dado certo com outros, não tem condição

Nelson Glauber disse...

Oi Ideia Informatica,

Antes de dizer que não funciona é bom checar ;)

4br4ç05,
nglauber

Idéia Informática Ltda. disse...

Obrigado pela resposta

Idéia Informática Ltda. disse...

Minhas opções não aparecem de jeito nenhum. Eu usava a ActionBarSherlock e apareciam normalmente, depois que mudei não aparecem. Alguma dica?

Nelson Glauber disse...

Olá Ideia Informática,

Algumas coisas que você deve checar:
1) Herdar de ActionBarActivity
2) Se está implementando o onCreateOptions() corretamente
3) Se está usando o namespace xmlns:suaapp

4br4ç05,
nglauber