A configuração android:windowActionBar="false"
realmente desativa a ActionBar, mas, como você diz, getActionBar();
retorna nulo. Isso é resolvido por:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.splash); // be sure you call this AFTER requestFeature
Isso cria a ActionBar e a oculta imediatamente antes que ela tenha a chance de ser exibida.
Mas agora há outro problema. Depois de colocar windowActionBar="false"
o tema, a Atividade desenha seu Título de Janela normal em vez de uma ActionBar.
Se tentarmos evitar isso usando alguns dos *.NoTitleBar
temas de estoque ou tentarmos incluir <item name="android:windowNoTitle">true</item>
nosso próprio tema, ele não funcionará.
O motivo é que o ActionBar depende do título da janela para se exibir - ou seja, o ActionBar é um título da janela transformado.
Portanto, o truque que pode nos ajudar é adicionar mais uma coisa ao nosso xml do tema Atividade:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Isso tornará o título da janela com altura zero, praticamente invisível.
No seu caso, depois de terminar de exibir a tela inicial, você pode simplesmente chamar
setContentView(R.layout.main);
getActionBar().show();
e você terminou. A atividade começará com nenhuma cintilação da ActionBar, nem o título da janela sendo exibido.
ADDON:
Se você mostrar e ocultar a ActionBar várias vezes, talvez tenha notado que a primeira exibição não é animada. A partir de então, mostrar e ocultar são animados. Se você quiser ter animação na primeira exibição também, use:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});
O mesmo pode ser alcançado com:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
mas pode ser necessário um pouco de lógica extra para verificar se esta é a primeira exibição da atividade.
A idéia é atrasar um pouco a ocultação da ActionBar. De certa forma, deixamos o ActionBar ser mostrado, mas depois o ocultamos imediatamente. Assim, vamos além da primeira exibição não animada e a próxima exibição será considerada a segunda, assim será animada.
Como você deve ter adivinhado, há uma chance de que o ActionBar possa ser visto antes de ser oculto pela operação atrasada. Este é realmente o caso. Na maioria das vezes, nada é visto, mas, de vez em quando, é possível ver o ActionBar piscar por uma fração de segundo.
De qualquer forma, essa não é uma solução bonita, por isso agradeço sugestões.
Além do usuário da barra de ação do suporte v7, o código será:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Theme.AppCompat.Light
... use this Como responder [1] [1]: stackoverflow.com/a/25365193/1364896