Paramètre android:windowActionBar="false"
vraiment désactive le contrôle ActionBar mais alors, comme vous le dites, getActionBar();
renvoie la valeur null.
Ce problème est résolu par:
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
Cela crée de l'ActionBar et cache immédiatement avant qu'il a eu la chance d'être affiché.
Mais maintenant, il est un autre problème. Après la mise windowActionBar="false"
dans le thème, l'Activité tire sa normal de Titre de la Fenêtre au lieu d'une ActionBar.
Si nous essayons d'éviter cela en utilisant une partie de l' *.NoTitleBar
du stock des thèmes ou nous essayons de mettre en <item name="android:windowNoTitle">true</item>
dans notre propre thème, ça ne marchera pas.
La raison en est que l'ActionBar dépend sur le Titre de la Fenêtre d'affichage lui-même - qui est l'ActionBar est une transformée de Titre de la Fenêtre.
Donc, l'astuce qui peut nous aider est d'ajouter une chose de plus à notre Activité thème xml:
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
Cela rendra le Titre de la Fenêtre avec une hauteur nulle, donc pratiquement invisible .
Dans votre cas, après vous avez terminé avec l'affichage de l'écran de démarrage, vous pouvez simplement appeler
setContentView(R.layout.main);
getActionBar().show();
et vous avez terminé. L'Activité va démarrer sans ActionBar scintillement, ni de Titre de la Fenêtre d'affichage.
ADDON:
Si vous avez d'afficher et de masquer l'ActionBar plusieurs fois peut-être vous avez remarqué que la première démonstration est pas animé. À partir de là, l'affichage et le masquage sont animés. Si vous voulez avoir de l'animation sur la première montre aussi, vous pouvez utiliser ceci:
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();
}
});
La même chose peut être réalisé avec:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
mais il peut avoir besoin de la logique supplémentaire pour vérifier si c'est la première exposition de l'Activité.
L'idée est de retarder un peu le cache de l'ActionBar. De façon à nous laisser l'ActionBar être montré, mais alors de le cacher immédiatement. Nous avons donc aller au-delà de la première non-animés montrant et en les montrant prochain sera considéré deuxième, il sera donc animé.
Comme vous l'aurez deviné il y a une chance que l'ActionBar pourrait être vu précédemment, il a été caché par le retard de l'opération. C'est effectivement le cas. La plupart du temps on ne voit rien, mais pourtant, une fois dans un certain temps, vous pouvez voir l'ActionBar scintillement pendant une fraction de seconde.
En tout cas, ce n'est pas une belle solution, donc je souhaite la bienvenue à toutes les suggestions.
Plus pour v7 soutien actionbar de l'utilisateur, le code sera:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();