ActionBar dans PreferenceActivity
Dans mon application, j'utilise la nouvelle Barre d'Action de la Compatibilité de l'échantillon à partir de Google (situé à <sdk>/samples/android-<version>/ActionBarCompat
) qui fonctionne très bien. Le seul problème que j'ai est de l'appliquer à mon PreferenceActivity
afin d'obtenir un écran comme les paramètres dans l'Android Market (voir photo).
Pour remplir le ActionBar
avec des icônes, chaque Activity
doit s'étendre à la ActionBarActivity
classe. Le problème est que mon Activity
s'étend déjà PreferenceActivity
et dans des classes Java ne peut pas s'étendre plus d'une classe.
Il doit y avoir un moyen d'obtenir le ActionBar
avec un PreferenceScreen
. Je serais heureux si quelqu'un pouvait fournir une solution pour ce problème commun.
P. S.: Une solution comme dans Comment ajouter un bouton à PreferenceScreen ne rentre pas parce que le ActionBar
est en fait la barre de titre et donc c'est plus un Java qu'une disposition de chose.
source d'informationauteur Matthias Robbers | 2011-10-28
Vous devez vous connecter pour publier un commentaire.
Edit: Ma réponse ci-dessous est plutôt hacky et il me semble qu'il est maintenant obsolète (pour la pré Android 3.0) jetez un oeil à l'autre des réponses pour le moins hacky et la plus actuelle des solutions ~colère 2014-09-01
J'ai réussi à le faire ne sais pas si c'est le plus beau/la solution la plus propre, mais ça fonctionne.
Avait pour apporter les modifications suivantes:
Faire une copie de
ActionBarActivity
et la nouvelle classe étendrePreferenceActivity
Modifier
onCreate()
dansActionBarHelperBase.java
légèrement - faire d'un cas particulier pourPreferenceActivity
classesVotre PreferenceActivity étendre cette classe et ajouter de la demande de
FEATURE_CUSTOM_TITLE
avant vous appelezsuper.onCreate()
Aussi loin que je peux dire, change 2 et 3 sont nécessaires parce que pour
PreferenceActivity
:Je suppose que l'ordre des composants dans
PreferenceActivity
activités sont créés est différent de la simpleActivity
activités .Si vous voulez essayer un PreferenceFragment mise en œuvre basée sur le soutien-v4 Fragment:
https://github.com/kolavar/android-support-v4-preferencefragment
Im en utilisant par moi-même et il n'est pas beaucoup de travail tournant PreferenceActivity en PreferenceFragment.
Pouvez-vous tout simplement de cloner le code pour ActionBarActivity, et le changement "s'étend de l'Activité" pour "s'étend PreferenceActivity"? Ensuite prolonger votre nouvelle classe à la place de ActionBarActivity.
À partir de toutes les applications Google, j'ai vu, cependant, il semble étrange de mettre des boutons dans la barre d'action d'un PreferenceActivity. Si vous ne mettez pas de boutons sur elle, vous pouvez simplement utiliser l'une des valeurs-v11 suppléant style de ressources pour afficher le holo thème, et le jeu de ce style dans le manifeste pour votre PreferenceActivity.
Que j'utilise dans mon application ce actionbar
https://github.com/johannilsson/android-actionbar et c'est de l'excellent travail avec ce fil Comment ajouter un bouton à PreferenceScreen
Je tiens à remercier @colère, offrant une excellente réponse, mais il a un problème qu'il ne fonctionne pas bien sur le Nid d'abeilles et au-dessus. eh bien, vous pouvez avoir un hack façon de l'obtenir autour de lui comme @AndroidDev dit;
Mais @colère va polluer le ActionBarHelperBase classe, et @AndroidDev n'est pas très transparent.La meilleure façon est de créer ActionBarActivityPreferences qui s'étend de PreferenceActivity; et dans la méthode onCreate, changer l'ordre de l'appel de méthode parent:
pourquoi appelle " mActionBarHelper.onCreate(savedInstanceState);' avant 'super.onCreate(savedInstanceState);", c'est parce que super (c'est à dire PreferenceActivity) est en fait le réglage de l'affichage du contenu dans sa méthode onCreate, qui serait la cause de crash ("requestFeature() doit être appelée avant l'ajout de contenu"). DONC, ce que vous devez faire est de permuter l'ordre, assurez-vous que ' mActionBarHelper.onCreate(savedInstanceState); " est appelé avant que le super.
De cette façon, nous n'avons pas besoin de polluer le "ActionBarHelperBase' cependant, nous gardons SettingActivity très propre parce que nous encapsuler le délicat détail de "ActionBarActivityPreferences" et bang!
Vous pouvez facilement ajouter de la barre d'actions de préférence de l'activité par les modifications suivantes:
Dans AndroidManifest.xml :
Dans v21/styles.xml
Dans v14/styles.xml pour le Retour à la prise en charge des API:
Merci, juste une mise à jour, vous devez ajouter une instruction if avant le Titre de la ligne de support en Nid d'abeille et au-dessus.
Vous pouvez obtenir un ActionBarSherlock lib et laissez vous code s'étend SherlockPreference;