web-dev-qa-db-ja.com

フォーカス上でクリック可能なTextViewの色を変更してクリックしますか?

クリック可能なTextViewを使用して、いくつかの色を指定します。しかし、私は方法がわかりません。以下は、私が作業している2つのファイルからの関連するコードスニペットです。

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

    }
});

そして、これは私の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>

title.setTextColor(R.color.textcolor);と入力してtextcolor-fileを使用すると、押すかどうかに関係なく、textcolorは灰色になります。すべての色フィールドに「#000000」と書いているので、これは奇妙です。
しかし、setTextColorコードを削除すると、textViewが明るい灰色になり、押すと黒になります。しかし、それは私が望む色ではありません。

だから、誰もこの問題で私を助けることができますか?

明確にするために、テキストが通常で、押されて、フォーカスされているときに、テキストの色を指定できるようにしたいと思います。

27
Daniel Jonsson

コードからステートフルカラーを設定する場合は、 ColorStateList への引数として setTextColor を渡す必要があります。この方法では、色がすべての状態に設定されます。また、XMLが完全に正しいわけではないようです。 ColorStateListドキュメントからの例は次のようになります(次のように配置する必要があります:_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>
_

ColorStateListをテキストの色に設定する方法のUPD:

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

:メソッドcreateFromXml(Resources, XmlPullParser parser)は廃止されましたAPIレベル23で使用します。createFromXml(Resources, XmlPullParser parser, Theme)を使用します

XMLを使用すると、次のように簡単になります。

_Android:textColor="@color/selector_txt"
_
59

ステップ1:このようにXMLでテキストの色を設定する

Android:textColor = "@ color/text_color"

ステップ2:作成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

これを試してみてください。

ファイル名: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>

XMLレイアウトの色を次のように設定してみてください。

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

R.Javaクラスを調べます(自動的に生成されます)。あなたはそのようなものを持っています:

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

だからあなたのコードで:

title.setTextColor(R.color.textcolor);

textcolor.xmlから値を設定するのではなく、R.Java(textcolor.xmlアドレスを含む)からintを設定します。色を設定する有効な方法は次のとおりです。

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

とても簡単です。これを試してください。

ファイル名: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" />

XMLレイアウトの色を次のように設定してみてください。

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

これは、プログラムによる非常に簡単な方法です。

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

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

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>

レイアウト内:

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

コード内:

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