J'essaie d'utiliser un TextView pour définir le style d'un TabWidget sur un Tabhost.
Je viens de créer un sélecteur pour bgcolor et cela fonctionne bien, mais je veux créer un sélecteur pour textColor mais la couleur du texte ne change pas:
Voici mon tab_text_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_selected="true" Android:color="@Android:color/white" />
<item Android:state_focused="true" Android:color="@Android:color/white" />
<item Android:state_pressed="true" Android:color="@Android:color/white" />
</selector>
Et voici le code lorsque j'essaie d'utiliser un fichier textView:
TextView txtTab=new TextView(this);
txtTab.setTextColor(R.drawable.tab_text_selector);
txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");
Je sais que la couleur du texte doit être blanche dans tous les cas, mais ce n'est pas le cas.
Vous devez utiliser getColorStateList () . Et pour XML, voir ici .
Je me battais aussi avec ce problème. Si vous souhaitez utiliser un state list
, vous devez le déclarer dans le dossier color
resources, au lieu du dossier drawable
, et utiliser la méthode setTextColor(getResources().getColorStateList(R.color.tab_text_selector))
.
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:color="@Android:color/white" />
<item Android:state_focused="true" Android:color="@Android:color/white" />
<item Android:state_pressed="true" Android:color="@Android:color/white" />
<item Android:color="#504f4f" /> <!-- default case -->
</selector>
Et réglez-le sur votre texte comme ci-dessous.
TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));
<TextView
Android:id="@+id/textView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:text="TextView"
Android:textColor="@drawable/tab_text_selector" />
Utilisez cette manière:
tab_text_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_pressed="true" Android:color="#FF111111"/>
<item Android:state_focused="true" Android:color="#FF222222"/>
<item Android:state_selected="true" Android:color="#FF333333"/>
</selector>
Affichage:
TextView txtTab = new TextView(this);
XmlResourceParser xrp = getResources().getXml(R.drawable.tab_text_selector);
try {
ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);
txtTab.setTextColor(csl);
} catch (Exception e) { }
txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");
Mais il vaut mieux mettre de la couleur dans /res/color/yourcolor.xml
Il suffit de faire sélecteur pour textcolor
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="@color/drawer_color" />
<item Android:state_focused="false" Android:color="@Android:color/white" />
<item Android:state_selected="true" Android:color="@color/drawer_color" />
Puis définissez la propriété textColor de Textview avec un ensemble clickable = true
<TextView
Android:clickable="true"
Android:textColor="@drawable/text_selector"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@string/registration"
Android:layout_alignParentRight="true"
Android:layout_alignParentEnd="true" />
@ ffleandro, @ ρяσѕρєя K répond à la meilleure variante, je pense que l'utilisation du meilleur choix de ColorStateList avec les versions les plus anciennes et les plus récentes d'Android.
int[][] states = new int[][] {
new int[] { Android.R.attr.state_pressed}, // pressed
new int[] { Android.R.attr.state_focused}, // focused
new int[] {}
};
int[] colors = new int[] {
getResources().getColor(R.color.green_color), // green
getResources().getColor(R.color.green_color), // green
getResources().getColor(R.color.white) // white
};
ColorStateList list = new ColorStateList(states, colors);
mTextView.setFocusable(true);
mTextView.setClickable(true);
mTextView.setTextColor(list);
<item Android:state_selected="true" Android:color="@Android:color/white" />
<item Android:state_focused="true" Android:color="@Android:color/red" />
<item Android:state_pressed="true" Android:color="@Android:color/blue" />
Voici la référence sur les développeurs Android http://developer.Android.com/guide/topics/resources/color-list-resource.html
Créez un sélecteur (text_color_selector.xml) et placez-le dans le dossier res/color:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/colorPrimary" Android:state_pressed="true" /> <!-- pressed -->
<item Android:color="@color/colorPrimary" Android:state_focused="true" /> <!-- focused -->
<item Android:color="@color/light_gray_b" /> <!-- default -->
</selector>
ajoutez ceci dans votre Textview en tant que:
<TextView
Android:id="@+id/tvMenuName"
style="@style/TextViewStyle"
Android:layout_marginLeft="@dimen/dimen_15"
Android:layout_marginStart="@dimen/dimen_15"
Android:textColor="@color/text_color_selector"
Android:textSize="@dimen/text_size_16"
tools:text="Home" />
par programmation, vous pouvez définir Textview comme ceci:
TextView tv = (TextView) findViewById(R.id.textView) ;
tv.setTextColor(context.getResources().getColor(R.color.text_color_selector));
J'espère que ça aide.
Vous avez utilisé la couleur blanche dans tous les cas. Sélectionnez, puis appuyez sur.
S'il vous plaît utiliser et tester avec une couleur différente.
Doit également utiliser une casse par défaut avec une certaine couleur, par exemple black, avec la casse tout .. quand aucun état n'est utilisé, la valeur par défaut sera appliquée.
Solution la plus simple et efficace:
Ex .: txtview.setTextColor (ContextCompat.getColorStateList (context, R.color.tab_tv_selector));