J'ai un problème étrange. Je crée une application avec targetdk 13.
Dans la méthode onCreate de mon activité principale, j'appelle getActionBar()
pour configurer ma barre d'actions. Cela fonctionne bien lors de l'exécution sur l'émulateur Android 3.2, mais lors de l'utilisation d'Android 3.0 et 3.1, la getActionBar()
méthode renvoie null.
Je trouve cela extrêmement étrange et je ne vois aucune raison pour laquelle ce serait le cas. Est-ce un bogue avec les émulateurs ou dois-je faire quelque chose pour m'assurer que mon application dispose d'une barre d'action?
SOLUTION:
Je pense avoir trouvé une solution à ce problème. Je n'utilisais pas setContentView pour définir une disposition pour l'activité. Au lieu de cela, j'utilisais fragmentTransaction.add(android.R.id.content, mFragment, mTag)
pour ajouter un fragment à l'activité. Cela fonctionnait bien dans la version 3.2, mais dans les versions antérieures en nid d'abeille, la barre d'action n'est apparemment pas définie si vous n'utilisez pas setContentView dans la onCreate()
méthode. Je l'ai donc corrigé en utilisant la setContentView()
méthode de ma onCreate()
méthode et en lui fournissant simplement une disposition contenant un FrameLayout vide. Je peux toujours utiliser la fragmentTransaction.add(android.R.id.content, mFragment, mTag)
méthode de la même manière qu'avant.
Ce n'est pas la meilleure solution, mais cela fonctionne.
la source
Réponses:
Peut utiliser à la
getSupportActionBar()
place de lagetActionBar()
méthode.la source
Si vous utilisez la bibliothèque de support
utilisation
getSupportActionBar()
au lieu degetActionBar()
* Mettre à jour:
La classe ActionBarActivity est désormais obsolète:
Je recommande d'utiliser:
la source
android.support.v7.app
:ActionBarActivity
obsolète À utiliser à laandroid.support.v7.app.AppCompatActivity
place.Vous devez définir le type de fenêtre comme barre d'actions avant que l'activité ne rende sa vue.
utilisation
avant d'appeler la méthode setContentView ().
la source
si vous utilisez android.support.v7.app.AppCompatActivity
la classe publique HomeActivity étend AppCompatActivity {
Ensuite, vous devriez utiliser android.support.v7.app.ActionBar
Si vous utilisez android.support.v4.app.FragmentActivity
classe publique HomeActivity étend FragmentActivity {
alors vous devriez utiliser android.app.ActionBar
Si vous utilisez android.support.v7.app.ActionBarActivity
La classe publique HomeActivity étend ActionBarActivity {
vous devriez utiliser android.support.v7.app.ActionBar
la source
J'ai rencontré le problème ci-dessus où la
getActionBar()
méthode retourne null. J'appelaisgetActionBar()
après avoir réglé lesetContentView()
et toujours son retour anull
.J'ai résolu le problème en définissant la version min-sdk dans le fichier Manifest Android qui manquait initialement.
<uses-sdk android:minSdkVersion="11" />
la source
ActionBar a besoin du thème de l'application ou de l'activité pour avoir un titre d'application. Assurez-vous que vous n'avez pas défini votre application ou activité comme Theme.NOTITLE.
la source
puis
puis utilisez
la source
Cette réponse est tardive, mais peut être utile à toute personne qui arrive de Google: vous devrez peut-être déclarer
dans votre
styles.xml
. Cela semblefalse
être la valeur par défaut. Vous devez également être sur l'API 11 ou une version ultérieure.Plus de détails peuvent être trouvés dans la documentation ici . Plus précisément, citez:
la source
J'ai eu le même problème et l'une des solutions était d'utiliser
setContentView()
avant d'appelergetActionBar()
.Mais il y avait une autre chose qui résolvait le problème. J'ai spécifié le thème de l'application
@android:style/Theme.Holo.Light
.Je pense que n'importe quel thème, qui a
<item name="android:windowActionBar">true</item>
dedans, peut être utilisé.la source
La raison principale en est l'utilisation de thèmes qui ne prennent pas en charge ActionBar:
Dans le fichier manifeste, ajoutez ce qui suit dans votre activité cible ou dans l'élément d'application (si vous souhaitez unifier le thème sur l'ensemble de l'application)
Exemples de thèmes qui soutiennent la barre d'action
"Theme.AppCompat.Light"
ou"Theme.Holo.Light"
...Il est préférable de mettre tous les styles
styles.xml
et de les utiliser partout en utilisant"@style/themName"
pour que le précédent soitet styles.xml aura les éléments suivants:
Conseils:
"@android:style/Theme.Holo.Light.DarkActionBar"
ne sont pas pris en charge avant la version 14 des SDK.Pour permettre à votre application de prendre en charge la version spécifique minimale du SDK, vous pouvez ajouter l'
<app>
élément suivant sous :Pour spécifier la version minimale du SDK dans AndroidStudio, vous pouvez utiliser le fichier Gradle de l'application.
la source
J'ai rencontré ce problème. Je vérifiais le numéro de version et n'activais la barre d'action que si elle est supérieure ou égale à Honeycomb, mais elle retournait null. J'ai trouvé la raison et la cause principale que j'avais désactivé le style Holo Theme dans style.xml dans le dossier values-v11.
la source
accédez au fichier AndroidManifest.xml et remplacez
android: theme = "@ style / AppTheme"
android: theme = "@ android: style / Theme.Holo.Light.DarkActionBar"
la source
Utilisez getSupportActionBar () au lieu de getActionBar ()
la source
Dans mon cas, j'avais ceci dans mon code qui ne fonctionnait pas:
Puis j'ai joué avec l'ordre du code:
Et ça a marché!
Conclusion: requestWindowFeature devrait être la première chose que vous appelez dans la méthode onCreate.
la source
J'ai eu le même problème. Il a été résolu en modifiant le thème de l'application dans styles.xml
Avant
Après
la source
Une chose que je voulais ajouter puisque je viens de rencontrer ceci, si vous essayez de getActionBar () sur une activité qui a un parent, il retournera null. J'essaie de refactoriser le code où mon activité est contenue dans un ActivityGroup, et il m'a fallu quelques minutes pour aller "oh duh" après avoir examiné la source de la création d'une ActionBar dans la source.
la source
Je le résous par ces changements:
android:theme="@android:style/Theme.Holo.Light" >
extends ActionBarActivity
import android.support.v7.app.ActionBarActivity
la source
Pour ajouter aux autres réponses:
Assurez-vous d'appeler
setActionBar()
ousetSupportActionBar()
dans votreonCreate()
méthode avant d'appeler legetActionBar()
:Définissez une barre d'outils dans votre activity.xml, puis dans le onCreate ():
la source
Je sais que je suis en retard à la fête (et que je suis nouveau sur Android) sur cette question, mais j'ai trouvé les informations ici très utiles et j'ai pensé que je devrais ajouter les résultats de mes propres efforts pour faire fonctionner ActionBar comme je le voulais au cas où d'autres comme moi viendraient chercher de l'aide.
J'ai un widget qui est une fenêtre flottante sans titre de fenêtre. J'utilise un thème de style pour implémenter
android:windowIsFloating
,android:backgroundDimEnabled
etandroid:windowNoTitle
. Le widget fonctionnait bien jusqu'à ce que je veuille ajouter un bouton qui appelait un pager de fragment avec plusieurs pages de fragment de liste et utilisait l'ActionBar. Il planterait sur l'activité du pager avec une exception de pointeur nul. Je l'ai réduit à l'ActionBar étant nul. Suite aux découvertes des personnes précédentes qui ont contribué à ce fil, j'ai supprimé mon thème du fichier manifeste et l'ActionBar fonctionnait bien, mais maintenant ma fenêtre flottait plus (elle était en plein écran) et elle avait un titre de page que je ne voulais pas.Des recherches plus poussées m'ont conduit au guide de formation de l'API Styles and Themes qui m'a conduit à une solution. J'ai découvert que je pouvais ajouter mon thème personnalisé à des activités individuelles dans le fichier manifeste alors qu'avant je l'appliquais à l'application. Toutes mes fenêtres ont maintenant l'apparence souhaitée.
la source
Essayez d'étendre votre classe Activity à partir d'ActionBarActivity. Cela a résolu le problème pour moi. Faites quelque chose comme ceci:
Dans mon cas, la classe ne s'étendait qu'à partir de l'activité.
la source
Cela peut également aider certaines personnes.
Dans mon cas, c'était parce que je n'avais pas défini de contexte dans le menu.xml
Essaye ça:
Au lieu de cela:
la source
Vérifiez simplement l'implémentation du code source par un clic de commande:
requestWindowFeature (Window.FEATURE_ACTION_BAR); Correction de mon problème car j'ai vu que requestWindowFeature (Window.FEATURE_ACTION_BAR) échouait; le code est open source, utilisez-le !!
la source
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
fonctionne assez rapidement
la source
Dans mon cas, j'ai simplement dû prolonger
AppCompatActivity
au lieu deActivity
Classe d'exemple d'activité complète:
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity
Sur les versions
la source