webentwicklung-frage-antwort-db.com.de

Ändern Sie die Farbe des anklickbaren TextView und klicken Sie auf?

Ich habe eine anklickbare Textansicht, der ich einige Farben geben möchte. Aber ich weiß nicht wie. Hier sind die relevanten Codeausschnitte aus meinen beiden Dateien, mit denen ich arbeite:

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 */                   

    }
});

Und das ist meine textcolor.xml-Datei:

<?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>

Wenn ich die textcolor-Datei verwende, tippe title.setTextColor (R.color.textcolor); , die Textfarbe wird grau, egal ob ich sie drücke oder so. Was seltsam ist, da ich in allen Farbfeldern "# 000000" geschrieben habe.
Wenn ich den setTextColor-Code entferne, erhält das TextView eine hellgraue Farbe, und wenn ich es drücke, wird es schwarz. Aber das sind nicht die Farben, die ich will.

Kann mir jemand bei diesem Problem helfen?

Nur zur Klarstellung: Ich möchte in der Lage sein, die Farben für den Text festzulegen, wenn er normal, gedrückt und fokussiert ist.

24
Daniel Jonsson

Wenn Sie Stateful-Farbe aus dem Code setzen möchten, müssen Sie ColorStateList als Argument an setTextColor übergeben, wobei ein Int an die Methode übergeben wird, indem Sie die Farbe auf alle Status setzen. Es sieht auch so aus, als ob Ihre XML nicht ganz korrekt ist. Beispiel aus ColorStateList docs sieht folgendermaßen aus (sollte wie folgt aussehen: 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 zum Einstellen einer ColorStateList auf die Textfarbe:

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

Hinweis: Die Methode createFromXml(Resources, XmlPullParser parser) wurde in API-Ebene 23 abgelehnt Verwendung createFromXml(Resources, XmlPullParser parser, Theme)

Mit XML ist es so einfach wie:

Android:textColor="@color/selector_txt"
56

Schritt 1: Legen Sie die Textfarbe wie folgt in XML fest

Android: textColor = "@ color/text_color"

Schritt 2: Erstellen Sie 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

Versuchen Sie es mit diesem. Es hat für mich funktioniert:

Dateiname: 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>

Stellen Sie die Farbe im XML-Layout folgendermaßen ein:

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

Schauen Sie in der R.Java-Klasse (sie wird automatisch generiert). Sie haben so etwas:

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

Also in deinem Code in der Zeile:

title.setTextColor(R.color.textcolor);

sie setzen keine Werte aus textcolor.xml, sondern int aus R.Java (die Adresse von textcolor.xml enthält). Die gültige Methode zum Einstellen der Farbe ist:

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

Es ist sehr einfach. Versuchen Sie es mit diesem. Es hat bei mir funktioniert:

Dateiname: 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" />

Stellen Sie die Farbe im XML-Layout folgendermaßen ein:

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

Hier ist ein sehr einfacher Weg programmgesteuert:

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

In 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

In 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>

Im Layout:

<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"/>

In Code:

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