状態で色を変える
AndroidのViewはenable/disableの状態や、pressした状態で色や形などを変更できる。
例としてテキストに対して以下のように作成できる。
pressで色を変える。
ボタンでテキストのisEnabled
属性を更新→値に応じて色を変える。
実装
drawable
drawableのリソースを作成し、以下の様にitem要素を追加する。
- disableのとき → android:state_enabled=“false”
- おさえたとき → android:state_pressed=“true”
- それ以外デフォルト → 上記は書かない
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="#F00" />
<item android:state_pressed="true" android:color="#0F0" />
<item android:color="#000" />
</selector>
View
ここではTextView
で実装する。
他のView
でも同様。
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Foo"
android:clickable="true"
android:textColor="@drawable/stateful_text" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click" />
state_pressed
を有効にするためには要素がクリックできる必要なのでandroid:clickable="true"
を指定している。
ボタンなどもともとクリックできるViewのときは指定不要。
android:textColor="@drawable/stateful_text"
で作成したdrawableのリソースを指定する。
ここまででpressしたら色が変わる。
ここではtextColor
について指定しているがbackground
などdrawableを指定できる属性であれば同様に指定できる。
Fragment
state_enabled
はViewのisEnabled
の値を変更すると
例としてボタンクリック時にTextView
のisEnabled
の値をトグルするようにする。
class FirstFragment : Fragment() {
private var _binding: FragmentFirstBinding? = null
private val binding get() = _binding!!
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.button.setOnClickListener {
// enable/disableを切り替える
binding.textView.isEnabled = !binding.textView.isEnabled
}
}
}
ボタンクリックでisEnabled
が変わるので、その値に応じて色が変わる。
\確かな知識を身に着けたい、Androidアプリ開発を学びたい人にオススメ!/