Primordial référencé attributs de style
Après la lecture par le biais de Les Références À Thème Attributs je suis en train de référence de la valeur d'un attribut dans la mon thème personnalisé que j'ai mis.
Je suis en appliquant un style définis par l'utilisateur pour un CheckedTextView
<CheckedTextView
android:id="@+id/contactInfo"
style="@style/ListViewCheckedTextViewRowStyle" >
</CheckedTextView>
Le style définis par l'utilisateur est défini comme :
<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
<item name="android:checkMark">?android:listChoiceIndicatorMultiple</item>
</style>
Mon thème que j'ai créé est défini comme :
<style name="Theme.Yellowgreen" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item>
</style>
Cependant, la coche style qui est affiché est le périphérique par défaut du thème drawable et pas mon défini par l'utilisateur drawable.
La seule façon que je peux avoir mon drawable est affiché avec :
<style name="ListViewCheckedTextViewRowStyle" parent="@style/ListViewRowStyle">
<item name="android:checkMark">@drawable/btn_check_holo_light</item>
</style>
Mais cela va à l'encontre de l'objectif même de l'annulation de cet attribut, surtout depuis que j'aimerais remplacer cet attribut dans plusieurs thèmes.
Je suis en train de le thème de la onCreate()
méthode de mon Activity
comme ceci:
public void onCreate(Bundle savedInstanceState) {
this.setTheme(R.style.Theme_Yellowgreen);
super.onCreate(savedInstanceState);
//...
}
J'ai aussi essayé de définir le thème de la AndroidManifest.xml fichier comme :
<application android:theme="@style/Theme.Yellowgreen" >
Mais cela ne fonctionne pas. Ce qui pourrait mal se passer?
Mise à jour
Je viens de créer un petit exemple de projet et il semble que le code que j'ai posté ci-dessus est le travail. Donc je doit avoir un peu d'autres styles qui sont à la substitution de cette propriété ou peut-être il a faire de ma mise en page des fichiers xml.
Dans mon gros projet, j'ai deux Fragments
au sein d'une Activity
. Les deux Fragments
ont Listviews
soutenu par Adapters
. Dans Fragment A
la getView()
méthode de la Adapter
est comme suit:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.contact_entry, null);
}
//...
return convertView;
}
Dans Fragment B
la getView()
méthode de la Adapter
est comme suit:
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item, parent, false);
}
//...
return convertView;
}
Les plans sont définis comme suit:
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/list_item_header" />
<include layout="@layout/contact_entry" />
<View android:id="@+id/list_divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@android:drawable/divider_horizontal_dark" />
</LinearLayout>
list_item_header.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/header_text"
android:layout_width="match_parent"
android:layout_height="25dip"
android:background="@color/dark_blue"
android:gravity="center_vertical"
android:paddingLeft="6dip"
android:textColor="@color/white"
android:textSize="14sp"
android:textStyle="bold" />
contact_entry.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contactEntry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal" >
<QuickContactBadge
android:id="@+id/contactPic"
style="@style/ContactPicStyle" />
<CheckedTextView
android:id="@+id/contactInfo"
style="@style/ListViewCheckedTextViewRowStyle" >
</CheckedTextView>
</LinearLayout>
Pour quelque raison, dans Fragment B
le thème coche attribut n'est pas rendu correctement alors que dans Fragment A
, la coche utilise le YellowGreen Thème et est de style correctement. Pourquoi en serait-il passe?
Je viens de créer un exemple de projet de tester vos fichiers de style et tout fonctionne bien pour moi. J'ai donc deuxième dominus' question: avez-vous mis de l'activité thème de
YellowGreen
dans le manifeste?hey @dominus et @Idolon, j'ai mis à jour la question. J'ai essayé le réglage de l'activité thème de deux manières différentes, mais ont échoué en remplaçant le
android:listChoiceIndicatorMultiple
attribut style.Si votre nom de thème est
YellowGreen
pourquoi as-tu mis dans le manifeste @style/Theme.Yellowgreen
. Je n'ai pas beaucoup de connaissances sur des thèmes personnalisés, juste essayer de comprendre.J'ai corrigé le nom du thème. C'était une faute de frappe dans le post original.
OriginalL'auteur toobsco42 | 2013-06-14
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez besoin de cette ligne dans votre thème
donc il devrait ressembler à ceci:
Mise à JOUR
Après la question de mise à jour et quelques informations supplémentaires formulaire de commentaires, nous avons constaté que le problème était dans
Context
. C'est la même erreur que j'ai fait dans ma question: Android sélecteur de couleur ne fonctionne pas avec les attributs personnalisésÀ un fragment a été adopté
Activity
et à l'autreApplication
. Je ne suis pas un expert mais même ces deux classes sont l'extension deContext
seulement laActivity
s'étendContextThemeWrapper
, qui offre des renseignements sur les styles. Il pourrait être utile de lire cet article pour l'avenir de la compréhension du Contexte: http://www.doubleencore.com/2013/06/context/android:listChoiceIndicatorMultiple
.Il pourrait être plus facile si vous nous donnez ensemble de l'échantillon du projet sur github avec des commentaires qu'est-ce exactement que vous voulez atteindre. La Solution pourrait être donné à l'aide de sondage de la demande.
Merci @Mikoos, j'ai posté plus de mon projet de code et je pense que je me rapproche d'elle pour trouver ce qui est mal. J'espère avoir fourni assez de détails.
Quel est le contexte de mInflater? Si vous avez passé le contexte de l'Adaptateur à l'aide du contexte.getcontexteapplication() il l'habitude de style correctement. Vous avez besoin de passer des Activités de contexte.
Merci @Mikoos. J'ai involontairement passait le contexte.getcontexteapplication() pour
Fragment B
, j'ai corrigé cela et il est enfin de style correctement. Pouvez vous s'il vous plaît mettre à jour votre réponse et de faire une remarque au sujet de pourquoi vous devez passer à l'Activité de Contexte de Contexte de l'Application et que je vais accepter votre réponse et de vous récompenser la générosité.OriginalL'auteur Mikooos