📱
AlertDialogのボタンが全部大文字になってしまう現象とその対処
課題
こののようなコードのとき
AlertDialog.Builder(requireContext())
.setTitle("Title")
.setMessage("Body")
.setPositiveButton("Googleログインする") { _, _ ->
// TODO: Impl
}
.setNegativeButton("Cancel") { _ , _ ->
// do nothing
}
.show()
コードを見ると以下のようなダイアログが表示されるように思うが
実際に表示されるダイアログは以下のように、ボタンの文言のアルファベットがすべて大文字になってしまう。
解決策
サクッと解決したいならばshowした後にgetButtonをしてisAllCapsをfalseしてやればよい。
AlertDialog.Builder(requireContext())
.setTitle("Title")
.setMessage("Body")
.setPositiveButton("Googleログインする") { _, _ ->
// TODO: Impl
}
.setNegativeButton("Cancel") { _, _ ->
// do nothing
}.create().apply {
this.show()
this.getButton(AlertDialog.BUTTON_POSITIVE).isAllCaps = false
this.getButton(AlertDialog.BUTTON_NEGATIVE).isAllCaps = false
}
無事に小文字は小文字として表示されるようになる。
こんな感じでボタンの色を変えられたりもします。
以下はあまりさせたくない方のアクションの色を弱めている例。
getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(
ContextCompat.getColor(
requireContext(),
R.color.black_54
)
)
ちなみにこれは対症療法でしかなく、styles.xmlでDialogのThemeを編集するのが正攻法だと思います。
参考
Discussion