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 さん、ありがとうございました![]()