クリック可能な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が明るい灰色になり、押すと黒になります。しかし、それは私が望む色ではありません。
だから、誰もこの問題で私を助けることができますか?
明確にするために、テキストが通常で、押されて、フォーカスされているときに、テキストの色を指定できるようにしたいと思います。
コードからステートフルカラーを設定する場合は、 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"
_
ステップ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>
これを試してみてください。
ファイル名: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"
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));
とても簡単です。これを試してください。
ファイル名: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"
これは、プログラムによる非常に簡単な方法です。
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);
}
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" />
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);