7
votes

Comment appliquer le thème sur Éléments d'une

J'ai une activité qui étendre la préfencitance.

Mon thème: Android: Theme = "@ Android: style / thème.light.notitlebar.fr.fr est appliqué au niveau d'application dans le fichier manifeste.

Tout obtient le thème souhaité, à l'exception des éléments "PréférencesCrean" de "PreferCeCategory". Ils ont toujours le fond noir par défaut. En mots simples, l'écran de la catégorie de préférences principale qui a les écrans de préférence parent obtient le thème, mais si je clique sur l'une des préférencesCreens pour accéder à leurs préférences d'élément (Editext, etc.), ils ne reçoivent pas le thème ... < / P>

Une idée de la raison pour laquelle cela pourrait se produire?

La structure ou les préférences.xml est quelque chose comme ceci: xxx


0 commentaires

5 Réponses :


3
votes

C'est un bogue dans les versions antérieures androïdes (voir aussi http: // code.google.com/p/android/issues/detail?id=4611 ).

Si je me souviens que les thèmes correctement ne sont pas correctement appliqués à une préférence sur toutes les versions Android 2.x. Un moyen de résoudre ce problème est de régler les couleurs / les polices, etc. vous-même, mais il existe également une solution de contournement décrite dans les commentaires du BugReport. Les thèmes doivent fonctionner correctement sur Android 3.0 et ultérieurement.


1 commentaires

Comment définissez-vous les couleurs et les polices vous-même?



5
votes

enfin, j'ai découvert comment changer de thème de "Préférence de la préfencitation" de manière programmatique (via Java Code)

pour changer le thème juste comme ceci: P>

        @Override
        public void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.Holo_Theme_Light);
        super.onCreate(savedInstanceState);
        }


1 commentaires

Est-ce possible pour la préférence?



0
votes
@Override
public boolean onPreferenceTreeClick(final PreferenceScreen preferenceScreen, final Preference preference) {
    // https://code.google.com/p/android/issues/detail?id=4611 comment #35
    if (preference instanceof PreferenceScreen && ((PreferenceScreen) preference).getDialog() != null)
        ((PreferenceScreen) preference).getDialog().getWindow().getDecorView().setBackgroundColor(Color.parseColor("#ffffff"));

    return super.onPreferenceTreeClick(preferenceScreen, preference);
}

0 commentaires

3
votes

En regardant la source de PréférencesCreen # Showdialog (Bundle) , nous voyons que la boîte de dialogue est créée à l'aide de la ressource thème obtenue via MCONText.Getthemeresid () , qui est ensuite utilisé dans un ContextHemewrapper .

Cela peut nous aider à nous aider de manière substantielle, car tout ce que nous avons à faire est de remplacer la méthode getthemeresid () dans votre activité (qui est caché de l'API publique) , pour fournir notre thème personnalisé, et que les sous-préférencesCrean utilisent désormais toute la ressource de thème personnalisée que nous voulions! xxx

Notez que parce que cette méthode est annotée avec @hide < / code>, nous ne pouvons pas utiliser l'annotation @override qui serait normalement utilisée dans ce cas; Et nous ne pouvons également pas appeler à la méthode Super.Getthemeresid () . Si vous vraiment, vraiment veux pouvoir le remplacer de manière conditionnelle et faire appel à la super mise en œuvre, vous devrez utiliser la réflexion pour accéder à la méthode de la super implantation: xxx


1 commentaires

Il faut mentionner que vous devez "remplacer" Getthemeresid () sur votre activité. Cela semble être la seule solution à travailler pour des préférences imbriquées.



2
votes

Comme toutes les autres réponses tentent de le résoudre à l'aide du code Java, voici comment je l'ai fait complètement en utilisant XML et sans déclarer ma propre classe de préférences.

J'ai d'abord copié la mise en page complète pour une préférence de ici et changé tous les "@ + Android: id / xyz " à " @ Android: id / xyz ". Ensuite, dans mon fichier de styles, j'ai déclaré un nouveau style comme suit: xxx

maintenant dans l'Apptheme, une nouvelle entrée de préférence: < Pré> xxx

Maintenant pour cette nouvelle mise en page, tous les styles que vous voulez. C'est tout.


1 commentaires

Très flexible, merci. C'est un excellent point de départ pour quiconque cherche à personnaliser les préférencescreen sans que tout réécrit à partir de zéro.