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:
aew \o/. uma lib a menos nos projetos (sherlok)
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
Oi Anônimo,
Editei o post para adicionar a SearchView.
Thanks for your comment!
4br4ç05,
nglauber
Muito bom, atendeu exatamente o que eu precisava.
Valeu!!
Excelente post Nelson! Parabéns e obrigado por compartilhar! :)
Não encontra R.id.search. O que uso no lugar?
Já descobri, obrigado
Não deu certo, o aplicativo parou ao entrar
Não pode ter dado certo com outros, não tem condição
Oi Ideia Informatica,
Antes de dizer que não funciona é bom checar ;)
4br4ç05,
nglauber
Obrigado pela resposta
Minhas opções não aparecem de jeito nenhum. Eu usava a ActionBarSherlock e apareciam normalmente, depois que mudei não aparecem. Alguma dica?
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
Postar um comentário