web-dev-qa-db-ja.com

Android RadioButton textColor selector

次のようなtextColorRadioButtonのセレクターがあります。

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true" Android:color="#fff"/>
    <item Android:state_focused="true" Android:color="#f00"/>
    <item Android:state_pressed="true" Android:color="#0f0"/>
    <item Android:state_focused="false" Android:state_pressed="false" Android:color="#00f"/>
</selector>

選択したRadioButtonは他のものとは異なる色になると予想しました。

ただし、すべてのRadioButtonsには青色のテキスト(Android:state_focused = "false" Android:state_pressed = "false"を使用)があり、選択されているものも含まれています。

私は何を間違えていますか?

27
Axarydax

間違ったセレクターを使用しているようです。ドキュメントでは、選択について次のように説明しています。

状態が変化するたびに、状態リストが上から下に走査され、現在の状態に一致する最初のアイテムが使用されます。選択は「最適一致」ではなく、単に状態の最小基準を満たす最初のアイテムに基づきます。 。

ソースリンク

だから、順番に:

  1. radioButtonsはオンにするとstate_checkedを使用するため、state_selectedは決して真になりません。
  2. radioButtonは入力フォーカスを受け取らないため、state_focusedは呼び出されません。
  3. state_pressedは機能しているはずです。指を押したままにすると、テキストが緑色で表示されませんか?
  4. state_focused falseおよびstate_pressed falseはデフォルトであるため、青で表示されます。

異なる状態を見たい場合は、これらを試してください:

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_pressed="true" Android:color="#0f0"/>
    <item Android:state_checked="true" Android:color="#fff"/>
    <item Android:color="#00f"/>
</selector>

上記をテストしましたが、すべての色が適切に表現されていることがわかります。

54
Grant Amos

Androidによると。 https://developer.Android.com/guide/topics/resources/color-list-resource.htmlhttps://developer.Android.com/reference/Android/content/res/ColorStateList.html

「res」ディレクトリに「color」というフォルダを作成し、radiobuttonstate.xmlという新しいファイルを作成する必要があります。たとえば、次のようになります。

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
   <item Android:state_focused="true"
    Android:color="YOUR COLOR" />

   <item
    Android:state_pressed="true"
    Android:state_enabled="false"
    Android:color="YOUR COLOR" />

    <item Android:color="YOUR COLOR"
    Android:state_checked="true"/>

    <item
    Android:state_enabled="false"
    Android:color="YOUR COLOR" />

   <item Android:color="YOUR COLOR" />
</selector>

次に、ラジオボタンで、以前に定義したカラーリストをAndroid:textColor属性で定義します。

  <RadioButton
                    Android:id="@+id/radio_H"
                    Android:layout_width="30dp"
                    Android:layout_height="30dp"
                    Android:text="@string/string_example"
                    Android:textColor="@color/radiobuttonstate"
                    Android:textAlignment="center" />
13
Isaias Carrera

@GrantAmosが提供する答えは完璧で、うまく機能しています。 XMLを介してテキストカラーセレクターを使用する場合は、このコードを使用してください。

Android:textColor="@color/textview_selector"

ただし、プログラムでセレクターを設定する場合は、次のコードを使用します-

radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));

それが誰かの時間を節約することを願っています。

10
Rohan Kandwal
    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_checked="false" Android:drawable="@color/dark_grey"/>
    <item Android:state_checked="true" Android:drawable="@color/topic_green"/>
</selector>

これは私のために動作します。実際にAndroid:color = "@ color/dark_grey"を使用するとき。うまくいきませんでした。しかし、私がドローアブルに変更したときはそうしました。

3
Ramesh_D

ラジオボタンのチェック済みプロパティを使用します。

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android"> 
    <item Android:state_pressed="true" Android:color="#0f0"/> 
    <item Android:state_checked="true" Android:color="#fff"/> 
    <item Android:color="#00f"/>
</selector>
0
user3636378