Estou tendo um problema estranho. Estou criando um aplicativo com o targetdk 13.
No método onCreate da minha atividade principal, eu chamo getActionBar()
para configurar minha barra de ação. Isso funciona bem quando executado no emulador do Android 3.2, mas ao usar o Android 3.0 e 3.1, o getActionBar()
método retorna nulo.
Acho isso extremamente estranho, e não vejo nenhuma razão para isso. Isso é um erro dos emuladores ou há algo que preciso fazer para garantir que meu aplicativo tenha uma barra de ação?
SOLUÇÃO:
Acho que encontrei uma solução para esse problema. Eu não estava usando o setContentView para definir um layout para a atividade. Em vez disso, eu estava usando fragmentTransaction.add(android.R.id.content, mFragment, mTag)
para adicionar um fragmento à atividade. Isso funcionou bem no 3.2, mas nas versões anteriores do honeycomb a barra de ação aparentemente não está definida se você não usar o setContentView no onCreate()
método Então eu o corrigi usando o setContentView()
método no meuonCreate()
corrigi método e fornecendo apenas um layout que continha um FrameLayout vazio. Ainda posso usar o fragmentTransaction.add(android.R.id.content, mFragment, mTag)
método da mesma maneira que antes.
Não é a solução mais bonita, mas funciona.
fonte
Respostas:
Pode usar em
getSupportActionBar()
vez degetActionBar()
método.fonte
Se você estiver usando a biblioteca de suporte
use em
getSupportActionBar()
vez degetActionBar()
* Atualização:
A classe ActionBarActivity agora está obsoleta:
Eu recomendo usar:
fonte
android.support.v7.app
:ActionBarActivity
obsoleto Useandroid.support.v7.app.AppCompatActivity
vez.É necessário definir o tipo de janela como barra de ação antes da atividade renderizar sua visualização.
usar
antes de chamar o método setContentView ().
fonte
se você estiver usando android.support.v7.app.AppCompatActivity
classe pública HomeActivity estende AppCompatActivity {
Então você deve usar android.support.v7.app.ActionBar
Se você estiver usando android.support.v4.app.FragmentActivity
classe pública HomeActivity estende FragmentActivity {
então você deve usar android.app.ActionBar
Se você estiver usando android.support.v7.app.ActionBarActivity
classe pública HomeActivity estende ActionBarActivity {
você deve estar usando android.support.v7.app.ActionBar
fonte
Eu enfrentei o problema acima, onde o
getActionBar()
método retorna nulo. Eu estava ligando para ogetActionBar()
depois de definir osetContentView()
e ainda está retornando umnull
.Resolvi o problema definindo a versão min-sdk no arquivo Android Manifest que estava ausente inicialmente.
<uses-sdk android:minSdkVersion="11" />
fonte
O ActionBar precisa do Tema do aplicativo ou atividade para ter um título de aplicativo. Verifique se você não denominou seu aplicativo ou atividade como Theme.NOTITLE.
fonte
então
então use
fonte
Esta resposta está atrasada, mas pode ser útil para quem chega do Google: pode ser necessário declarar
no seu
styles.xml
. Parecefalse
pode ser o padrão. Você também precisa estar na API 11 ou superior.Mais detalhes podem ser encontrados na documentação aqui . Especificamente, citação:
fonte
Eu tinha o mesmo problema e uma das soluções era usar
setContentView()
antes de ligargetActionBar()
.Mas havia outra coisa que resolveu o problema. Especifiquei o tema para o aplicativo
@android:style/Theme.Holo.Light
.Eu acho que qualquer tema, que contém
<item name="android:windowActionBar">true</item>
, pode ser usado.fonte
O principal motivo disso é o uso de temas que não oferecem suporte ao ActionBar:
No arquivo de manifesto, adicione o seguinte na atividade de destino ou no elemento do aplicativo (se você deseja unificar o tema em todo o aplicativo)
Exemplos de temas que suportam barra de ação
"Theme.AppCompat.Light"
ou"Theme.Holo.Light"
...É melhor colocar todos os estilos
styles.xml
e usá-los em qualquer lugar,"@style/themName"
para que o anterior sejae styles.xml terão o seguinte:
Dicas:
"@android:style/Theme.Holo.Light.DarkActionBar"
não são suportados antes da versão 14 do SDKs.Para permitir que seu aplicativo ofereça suporte à versão específica mínima do SDK, você pode adicionar o seguinte no
<app>
elemento:Para especificar a versão mínima do SDK no AndroidStudio, você pode usar o arquivo Gradle do aplicativo.
fonte
Eu encontrei este problema. Eu estava checando o número da versão e ativando a barra de ação apenas se for maior ou igual ao Honeycomb, mas estava retornando nulo. Descobri o motivo e a causa raiz: desabilitei o estilo Tema Holo em style.xml na pasta values-v11.
fonte
acesse o AndroidManifest.xml e substitua
android: theme = "@ style / AppTheme"
android: theme = "@ android: style / Theme.Holo.Light.DarkActionBar"
fonte
Use getSupportActionBar () em vez de getActionBar ()
fonte
No meu caso, eu tinha isso no meu código que não funcionava:
Então eu brinquei com a ordem do código:
E funcionou!
Conclusão: requestWindowFeature deve ser a primeira coisa que você chama no método onCreate.
fonte
Eu tive o mesmo problema. Ele foi resolvido perseguindo o tema do aplicativo em styles.xml
Antes
Depois de
fonte
Uma coisa que eu gostaria de adicionar desde que acabei de descobrir isso, se você estiver tentando obter getActionBar () em uma atividade que tenha um pai, ele retornará nulo. Estou tentando refatorar o código onde minha Atividade está contida em um ActivityGroup, e demorou alguns minutos para que eu seguisse "oh duh" depois de examinar a fonte de como um ActionBar é criado na fonte.
fonte
Eu resolvo isso com essas alterações:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
fonte
Para adicionar às outras respostas:
Certifique-se de ligar
setActionBar()
ousetSupportActionBar()
usar seuonCreate()
método antes de chamar ogetActionBar()
:Defina alguma barra de ferramentas no seu activity.xml e, em seguida, no onCreate ():
fonte
Sei que estou atrasado para a festa (e sou novo no Android) sobre essa questão, mas achei as informações aqui muito úteis e achei que deveria adicionar as descobertas de meus próprios esforços ao fazer com que o ActionBar funcionasse como eu queria, caso outros como eu viessem. procurando ajuda.
Eu tenho um widget que é uma janela flutuante sem título de janela. Eu uso um tema estilo de implementar
android:windowIsFloating
,android:backgroundDimEnabled
eandroid:windowNoTitle
. O widget funcionou bem até que eu quisesse adicionar um botão que chamasse um pager de fragmentos com várias páginas de fragmentos de lista e usasse o ActionBar. Falhava na atividade do pager com uma exceção de ponteiro nulo. Limitei-o ao ActionBar sendo nulo. Após as descobertas de pessoas anteriores que contribuíram para esse tópico, removi meu tema do arquivo de manifesto e o ActionBar funcionou bem, mas agora minha janela flutuava mais (era em tela cheia) e tinha um título de página que eu não queria.Mais pesquisas me levaram ao Guia de treinamento da API de estilos e temas, que me levou a uma solução. Descobri que podia adicionar meu tema personalizado a atividades individuais no arquivo de manifesto, enquanto antes de aplicá-lo ao aplicativo. Todas as minhas janelas agora têm a aparência desejada.
fonte
Tente estender sua classe Activity de ActionBarActivity. Isso resolveu para mim. Faça algo como o seguinte:
No meu caso, a classe estava se estendendo apenas a partir de Activity.
fonte
Isso também pode ajudar algumas pessoas.
No meu caso, foi porque eu não havia definido um contexto no menu.xml
Tente o seguinte:
Em vez disso:
fonte
Basta verificar a implementação do código-fonte clicando no comando:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Corrigido meu problema quando vi requestWindowFeature (Window.FEATURE_ACTION_BAR) está falhando; código é open source use-o !!
fonte
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
funciona muito rapidamente
fonte
No meu caso, eu simplesmente tive que estender em
AppCompatActivity
vez deActivity
Classe de exemplo de atividade completa:
importar android.os.Bundle importar androidx.appcompat.app.AppCompatActivity
Em versões
fonte