La compatibilité de la barre d'action a été ajoutée à la bibliothèque de support, révision 18. Elle a maintenant une ActionBarActivity
classe pour créer des activités avec la barre d'action sur les anciennes versions d'Android.
Existe-t-il un moyen d'ajouter la barre d'action de la bibliothèque de support dans PreferenceActivity
?
Auparavant, j'utilisais ActionBarSherlock et c'est le cas SherlockPreferenceActivity
.
Réponses:
EDIT: Dans appcompat-v7 22.1.0, Google a ajouté la classe abstraite AppCompatDelegate en tant que délégué que vous pouvez utiliser pour étendre la prise en charge d'AppCompat à n'importe quelle activité.
Utilisez-le comme ceci:
Plus de piratage. Code extrait de AppCompatPreferenceActivity.java .
la source
(ViewGroup) getWindow().getDecorView().getRootView()
Il n'y a actuellement aucun moyen de réaliser avec AppCompat. J'ai ouvert un bug en interne.
la source
PreferenceActivity
à être ajoutésActionBarCompat
?J'ai réussi à créer une solution de contournement similaire à celle utilisée par le Google Play Store. Lien vers la réponse originale
Veuillez trouver le dépôt GitHub: ici
Très similaire à votre propre code mais ajouté xml pour permettre le titre défini:
Continuer à utiliser
PreferenceActivity
:settings_toolbar.xml :
SettingsActivity.java :
Result :
MISE À JOUR (compatibilité pain d'épice):
Comme indiqué ici , Gingerbread Devices renvoie NullPointerException sur cette ligne:
RÉPARER:
SettingsActivity.java :
Tout problème avec ce qui précède, faites le moi savoir!
MISE À JOUR 2: CONTOURNEMENT DE TEINTE
Comme indiqué dans de nombreuses notes de développement,
PreferenceActivity
ne prend pas en charge la teinte des éléments, mais en utilisant quelques classes internes, vous POUVEZ y parvenir. C'est jusqu'à ce que ces classes soient supprimées. (Fonctionne avec le support appCompat-v7 v21.0.3).Ajoutez les importations suivantes:
Remplacez ensuite la
onCreateView
méthode:Result:
AppCompat 22.1
AppCompat 22.1 a introduit de nouveaux éléments teintés, ce qui signifie qu'il n'est plus nécessaire d'utiliser les classes internes pour obtenir le même effet que la dernière mise à jour. Au lieu de cela, suivez ceci (toujours prioritaire
onCreateView
):ÉCRANS DE PRÉFÉRENCE EMBARQUÉS
Beaucoup de gens rencontrent des problèmes pour inclure la barre d'outils dans les
<PreferenceScreen />
s imbriqués , cependant, j'ai trouvé une solution !! - Après de nombreux essais et erreurs!Ajoutez ce qui suit à votre
SettingsActivity
:La raison pour laquelle cela
PreferenceScreen
est si pénible est parce qu'ils sont basés comme une boîte de dialogue wrapper, nous devons donc capturer la disposition de la boîte de dialogue pour y ajouter la barre d'outils.Ombre de la barre d'outils
De par sa conception, l'importation de
Toolbar
ne permet pas d'élévation et d'ombrage dans les appareils antérieurs à la v21, donc si vous souhaitez avoir une élévation sur votre,Toolbar
vous devez l'envelopper dans unAppBarLayout
:`settings_toolbar.xml:
Sans oublier d'ajouter l'ajout de la bibliothèque Design Support en tant que dépendance dans le
build.gradle
fichier:Android 6.0
J'ai étudié le problème de chevauchement signalé et je ne peux pas reproduire le problème.
Le code complet utilisé comme ci-dessus produit les éléments suivants:
S'il me manque quelque chose, veuillez me le faire savoir via ce dépôt et j'enquêterai .
la source
:)
PreferenceActivity
une telle douleur dans le cul à utiliser ??? c'est censé gagner du temps. Je pourrais aussi bien faire une activité régulière et disposer manuellement tous les paramètres dans une disposition linéaire moi-même. Fuuuuck!Nous avons trouvé une implémentation PreferenceFragment basée sur le fragment support-v4:
https://github.com/kolavar/android-support-v4-preferencefragment
Edit: je viens de le tester et ça marche très bien!
la source
L'intégration
PreferenceActivity
avec ABC n'est pas possible, du moins pour moi. J'ai essayé les deux possibilités que j'ai pu trouver mais aucune n'a fonctionné:Option 1:
ActionBarPreferenceActivity
s'étendPreferenceActivity
. Lorsque vous faites cela, vous êtes limité parActionBarActivityDelegate.createDelegate(ActionBarActivity activity)
. Vous devez également mettre en œuvreActionBar.Callbacks
ce qui n'est pas accessibleOption 2:
ActionBarPreferenceActivity
s'étendActionBarActivity
. Cette approche nécessite la réécriture d'un tout nouveauPreferenceActivity
,PreferenceManager
et peut êtrePreferenceFragment
ce qui signifie que vous avez besoin d'accéder à des classes cachées commecom.android.internal.util.XmlUtils
La solution à cela ne peut venir que des développeurs de Google implémentant unActionBarWrapper
qui peut être ajouté à n'importe quelle activité.Si vous avez vraiment besoin d'une activité de préférence, mon conseil pour le moment est
ActionBarSherlock
.Cependant, j'ai réussi à l'implémenter ici .
la source
Contexte du problème:
Le PO veut savoir comment mettre
MenuItem
s dans leActionBar
dePreferenceActivity
pour pré-Honeycomb car la bibliothèque de support d'Android a un bogue qui ne permet pas que cela se produise.Ma solution:
J'ai trouvé un moyen beaucoup plus propre, que déjà proposé, d'atteindre l'objectif (et je l'ai trouvé dans la documentation Android ):
Maintenant, faites ce que vous feriez normalement dans votre fichier
onOptionsItemSelected()
. Puisqu'il fait partie d'Android Docs, il n'a aucun effet secondaire.Bon codage. :)
Mettre à jour:
Cette solution ne fonctionne plus si vous ciblez Lollipop. Si vous utilisez AppCompat, cette réponse est ce que vous devriez rechercher.
la source
PreferencesActivity
n'avait aucun moyen de placer des élémentsActionBar
, en particulier le bouton de retour. Ma réponse est une bonne solution pour cela.:)
J'ai pu obtenir
android.app.Actionbar
en utilisantgetActionBar()
. Il a renvoyé une valeur nulle au début ... puis je suis allé au manifeste et j'ai changé le thème en:Ensuite, j'ai pu à nouveau avoir la barre d'action. Je suppose que cela ne fonctionnera que pour certains niveaux de construction. Vous voudrez peut-être vérifier le numéro de build ou vérifier si la valeur renvoyée est nulle.
Ce sera bien pour moi car l'application sur laquelle je travaille est pour
ICS/4.0
+.la source
Maintenant, la réponse officielle à ce problème a été publiée. C'est le support des préférences v7 / v14 bibliothèque de .
Voir Comment utiliser la bibliothèque de prise en charge des préférences v7 / v14? pour la discussion comment l'utiliser.
la source