ActionBarCompat: Masquer ActionBar avant la création de l'activité (bug?)
J'ai donc été à l'aide de la ActionBarSherlock et a décidé de passer à la nouvelle ActionBarCompat. Avec l'ABS, le masquage de l'ActionBar est possible, en utilisant de la manière décrite dans ce post:
Comment masquer la barre d'action avant l'activité est créée, puis de le montrer à nouveau?
Mais, avec le ActionBarCompat l'application se bloque sur API14, parce que lorsque vous définissez android:windowActionBar
comme false
la getSupportActionBar()
méthode renvoie null, même si vous avez déclaré le getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
dans le onCreate()
méthode.
Drôle, c'est que si vous appelez getActionBar()
au lieu de cela, vous obtenez de l'objet et tout fonctionne bien.
Donc, est-ce un bug ou ai-je raté quelque chose? Toutes les idées sont les bienvenue!
styles.xml
fichier:
<style name="Theme.MyApp" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowActionBar">false</item>
<item name="android:windowTitleSize">0dp</item>
</style>
MyActivity.java
fichier:
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Get the action bar feature. This feature is disabled by default into the theme
//for specific reasons.
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
...
//By default the action bar is hidden.
getSupportActionBar().hide();
}
source d'informationauteur | 2013-08-30
Vous devez vous connecter pour publier un commentaire.
Je suis coincé avec le même problème et, il me semble, trouvé une raison de cet étrange comportement. J'ai regardé à travers la source de bibliothèque de prise en charge et obtenu ceci:
Appcompat vérifie la valeur de
mHasActionBar
variable avant la création de la nouvelle barre d'action dans ActionBarActivityDelegateEt on peut changer sa valeur en appelant
supportRequestWindowFeature(int featureId)
qui est délégué parActionBarActivity
à un ActionBarActivityDelegate.Il y a de la base de délégué de classe
ActionBarDelegateBase
et de ses descendantsActionBarDelegateHC
ActionBarActivityDelegateICS
ActionBarActivityJB
dont l'un est choisi selon une version de android. Et la méthodesupportRequestWindowFeature
est en fait fonctionne très bien dans presque tous d'entre eux, mais il est remplacé dansActionBarActivityDelegateICS
comme çaDe sorte qu'il n'a pas d'effet sur la variable
mHasActionBar
c'est pourquoigetSupportActionBar()
renvoie la valeur null.On y est presque. Je suis venu à deux solutions différentes.
Première
source d'importation du projet de appcompat de git
changement de méthode redéfinie dans
ActionBarActivityDelegateICS.java
à quelque chose comme ceciplacer cette ligne dans l'activité de
onCreate
méthode avant degetSupportActionBar()
Deuxième façon
projet d'importation de appcompat à partir du kit SDK d'android (qui est vide répertoire src)
ajouter cette méthode à votre activité
appel
requestFeature()
dansonCreate
méthode de votre activité de ce genreJ'ai utilisé la deuxième méthode. C'est tout.
Je l'utiliser pour masquer ActionBar dans AppCompat:
style.xml
AndroidManifest.xml:
Je ne sais pas si j'ai compris votre question, mais j'y vais.
Je pense que vous devez utiliser à la fois:
getSupportActionBar()
à des versions plus anciennes etgetActionBar()
pour les versions les plus récentes. Ce n'est pas un bug.Vous avez besoin pour vérifier la version du dispositif avant d'utiliser les méthodes.
J'espère que j'ai été en mesure d'aider.
Est-ce que votre activité s'étend ActionBarActivity? Probablement, il ne l'est pas et c'est pourquoi il est en cours d'exécution avec la getActionbar() la méthode.