Androidはワンツーパンチ 三歩進んで二歩下がる

プログラミングやどうでもいい話

TextViewを押した時にselectorを使って色を変える

自分用メモ。

よくButtonなどで使われていますが、状態によって色調の違う画像を表示したりして、リアルにクリックした感じを演出したりしますよね。
xmlでselectorというタグを使用して、ボタンが押された時、フォーカスされた時などの
状態毎にリソースを定義します。
それのテキスト版です。
参考:ColorStateList stackoverflow

色の定義をするxmlファイルを作る。
ここではフォーカスされている・されていない時共通で、押されてない時は青い色、押された時はグレーにしています。
res/drawable/text_color.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="@color/blue01" />
    <item android:state_focused="true" android:state_pressed="true" android:color="@color/gray01" />
    <item android:state_focused="false" android:state_pressed="true" android:color="@color/gray01" />
    <item android:color="@color/blue01" />
</selector>

TextViewのTextColor属性に先程のxmlファイルを指定する。

        <TextView
            android:id="@+id/textview_link"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:text="@string/text_link"
            android:textColor="@drawable/text_color" />

以上です。