Webエンジニアのメモ帳

技術的な話を中心に書いています。

【Android開発】ダイアログのボタンが表示されない場合の対処法

発生した現象

ボタンを押すと以下のコードが実行され、ダイアログが表示されるように実装しました。

AlertDialog.Builder(this)
  .setTitle("データの削除")
  .setMessage("データを削除します。")
  .setPositiveButton("はい") { dialog, which ->
    // ここにデータを削除するメソッドを記述
  }
  .setNeutralButton("キャンセル", null)
  .show()

ちなみに、コードは入門書の内容のほぼそのままです。

そしてボタンを押したところ...

f:id:iberia9lavapies:20220218130613p:plain

「はい」と「キャンセル」のボタンがありませんでした。

原因と解決方法

原因は、ボタン自体は表示されていたものの、文字の色が白になっていたことでした。(ボタンが本来表示されるはずの位置をクリックすると動作したことにより判明)

以下の2つの対応を行うことで、これを解決できました。

  1. ボタンのスタイルの定義
  2. 定義したスタイルのダイアログへの適用

順に説明します。

1. ボタンのスタイルの定義

res/values/themes/themes.xmlに以下のように追記します。

<resources xmlns:tools="http://schemas.android.com/tools">
  <!-- 中略 元々記載されていた内容 -->
  <style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"></style>
</resources>

スタイルの定義といっても、既存のスタイルをそのまま利用するだけなので、複雑な記述は必要ありません。

2. 定義したスタイルのダイアログへの適用

先ほど定義したDialogThemeを適用します。(以下のコードの1行目。他の部分はそのままです。)

AlertDialog.Builder(this, R.style.DialogTheme)
  .setTitle("データの削除")
  .setMessage("データを削除します。")
  .setPositiveButton("はい") { dialog, which ->
    // ここにデータを削除するメソッドを記述
  }
  .setNeutralButton("キャンセル", null)
  .show()

これで、以下の画像のようにボタンを表示することができました。

f:id:iberia9lavapies:20220218131509p:plain