web-dev-qa-db-fra.com

Changer la couleur de TextView cliquable sur le focus et cliquez sur?

J'ai un TextView cliquable que je veux donner des couleurs. Mais je ne sais pas comment. Voici les extraits de code pertinents de mes deux fichiers avec lesquels je travaille:

TextView title = new TextView(this);
title.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
title.setTextColor(R.color.textcolor);
title.setText(titleLine);
title.setTypeface(null, Typeface.BOLD);
title.setClickable(true);
title.setId(idLine);
title.setFocusable(true);

title.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

                /* Irrelevant code */                   

    }
});

Et voici mon fichier textcolor.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="#000000"/> <!-- pressed -->
    <item Android:state_focused="true"
          Android:color="#000000"/> <!-- focused -->
    <item Android:color="#000000"/> <!-- default -->
</selector>

Quand j'utilise le fichier textcolor en tapant title.setTextColor (R.color.textcolor); , la couleur du texte devient simplement grise, que j'appuie ou non. Ce qui est étrange puisque j'ai écrit "# 000000" dans tous les champs de couleur.
Mais si je supprime le code setTextColor, le textView devient gris clair et lorsque je l’applique, il devient noir. Mais ce ne sont pas les couleurs que je veux.

Alors, est-ce que quelqu'un peut m'aider avec ce problème?

Juste pour clarifier: je veux pouvoir spécifier les couleurs du texte quand il est normal, pressé et concentré.

24
Daniel Jonsson

Si vous souhaitez définir une couleur avec code à partir du code, vous devez passer ColorStateList en tant qu'argument pour setTextColor en passant un int à la méthode, vous définissez la couleur sur tous les états. Il semble également que votre code XML n'est pas totalement correct. Exemple de ColorStateList docs ressemble à (devrait être situé comme ceci: res/color/selector_txt.xml):

 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_focused="true" Android:color="@color/testcolor1"/>
    <item Android:state_pressed="true" Android:state_enabled="false" Android:color="@color/testcolor2" />
    <item Android:state_enabled="false" Android:color="@color/testcolor3" />
    <item Android:color="@color/testcolor5"/>
 </selector>

UPD sur la manière de définir une ColorStateList sur la couleur du texte:

ColorStateList cl = null;
try {
   XmlResourceParser xpp = getResources().getXml(R.color.selector_txt);
   cl = ColorStateList.createFromXml(getResources(), xpp);
} catch (Exception e) {}

Remarque: la méthode createFromXml(Resources, XmlPullParser parser) était obsolète dans l'API de niveau 23 . Utilisez createFromXml(Resources, XmlPullParser parser, Theme)

Avec XML, c'est aussi simple que:

Android:textColor="@color/selector_txt"
56
Konstantin Burov

Étape 1: Définissez la couleur du texte en xml comme ceci

Android: textColor = "@ color/text_color"

Étape 2: Créer res/color/text_color.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >

<item Android:state_pressed="true"
      Android:color="#ffffffff"/> <!-- pressed -->
<item Android:state_focused="true"
      Android:color="#ff0000ff"/> <!-- focused -->
<item Android:color="#ff000000"/>  <!--default -->

</selector>
42
srichinna

Essayez celui-ci .. Cela a fonctionné pour moi:

Nom du fichier: res/color/bg_tab_text_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="false" Android:state_selected="false" Android:color="@color/tab_unselected_text_color"/>
    <item Android:state_pressed="true" Android:color="@color/tab_selected_text_color"/>
    <item Android:state_pressed="false" Android:state_selected="true" Android:color="@color/tab_selected_text_color"/>
    <item Android:color="@color/tab_unselected_text_color"></item>
</selector>

Essayez de définir la couleur dans la disposition XML comme suit:

Android:textColor="@color/bg_tab_text_color"
16
Mahendra Liya

Regardez dans la classe R.Java (elle est générée automatiquement). Vous avez quelque chose comme ça:

 public static final class color {
        public static final int gray_transparent=0x7f050001;
}

Donc dans votre code en ligne:

title.setTextColor(R.color.textcolor);

vous ne définissez pas les valeurs de textcolor.xml mais int de R.Java (qui contient l'adresse textcolor.xml). La méthode valide pour définir la couleur est la suivante:

title.setTextColor(getResources().getColorStateList(R.color.textcolor));
10
zirael

C'est très facile. Essayez celui-ci .. Cela a fonctionné pour moi:

Nom du fichier: res/color/bg_tab_text_color.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

<item Android:state_pressed="true" Android:drawable="@color/blue" />

Essayez de définir la couleur dans la disposition XML comme suit:

Android:textColor="@color/bg_tab_text_color"
3
Cabezas

Voici un moyen très simple par programme:

private void setColorStateList(TextView view) {
        int[][] states = new int[][] {
                new int[] { Android.R.attr.state_pressed}, // pressed
                new int[] { Android.R.attr.state_focused}, // focused
                new int[] { Android.R.attr.state_enabled}  // enabled
        };

        int[] colors = new int[] {
                getResources().getColor(R.color.blue),
                getResources().getColor(R.color.green),
                getResources().getColor(R.color.green) 
        };

        ColorStateList list = new ColorStateList(states, colors);
        view.setTextColor(list);
        view.setClickable(true);
        view.setFocusableInTouchMode(true);
    }
2
MrG

Dans res/drawable/tab_textColor.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="#FFFFFF" />
    <item Android:state_pressed="true" Android:color="#FFFFFF" />
    <item Android:color="#CCCCCC" />
</selector>



<TextView
    Android:id="@+id/title"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_below="@+id/icon"
    Android:layout_centerHorizontal="true"
    Android:layout_marginTop="5dp"
    Android:text="@string/tab_indicator_home"
    Android:textColor="@drawable/tab_textcolor"
    Android:textSize="10sp"
    Android:visibility="visible"
    tools:ignore="SmallSp" />
0
Stephen

Dans res/color/text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:color="@color/white"
          Android:state_selected="true"/>
    <item Android:color="#8020e0"/>
</selector>

En mise en page:

<TextView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Word"
    Android:textColor="@color/text_selector"
    Android:textSize="12sp"/>

Dans du code:

textView.setSelected(false); // To deselect.
textView.setSelected(true);
0
CoolMind