Activityからボタンのクリックを無効にするには**isClickable
**を使います。
良い例
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
Toast.makeText(applicationContext, "ボタンをクリックしました", Toast.LENGTH_SHORT).show()
}
// クリックを無効にする
button.isClickable = false
}
}
注意点としては、setOnclickLisnter
の後に記述すること。
setOnclickLisnter
がクリックのフラグをtrue
に変更してしまうためです。
android - Button.setClickable(false) is not working - Stack Overflow
悪い例
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 無効にならない
button.isClickable = false
button.setOnClickListener {
Toast.makeText(applicationContext, "ボタンを押しました", Toast.LENGTH_SHORT).show()
}
}
}
ちなみに、iOSだとisEnable=true
を設定したボタンは文字色がグレーになるので非活性だとわかりやすいのですが、
Androidではクリックが有効であれ無効であれ見た目は変わらないので、別途ボタンの色や透明度を変更してあげる必要がありそうです。
追記
**isEnabled
**を使えば、文字色がグレーになることがわかりました!
(isClickable
と違ってリスナーの影響は受けないようなので、前後どちらに書いても大丈夫です。)
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// クリックを無効にする + 文字のグレーアウト
button.isEnabled = false
button.setOnClickListener {
Toast.makeText(applicationContext, "ボタンを押しました", Toast.LENGTH_SHORT).show()
}
}
}
単にクリックを無効化したい場合はisClickable
を使い、その上でユーザーに使えないよと示したい場合にはisEnabled
を使うと良さそうだなと思いました。
ご指摘頂いた @entan05 さん、ありがとうございました