Toastは一定時間で消えてしまいますがAlertDialogはそのまま表示してくれるので、ユーザーにある程度長いメッセージを出したり、何かを選択させたりするのに便利です。
Android Studio
2021.2.1
2021.2.1
AlertDialog
ここでは簡単なメッセージとYes/Noのリプライを受け取るAlertDialogを作成します
AlertDialogはタイトル、最大 3 つのボタン、選択可能なアイテムのリスト、またはカスタム レイアウトを表示できるダイアログになります
一方で、DialogFragmentで作成するとより複雑なアラートを作ることができ、ダイアログの作成と外観の管理に必要なすべてのコントロールが提供されます
超簡単なAlertDialog
シンプルにするとこれでAlertDialogが表示できます
1 2 3 4 5 |
new AlertDialog.Builder(this)AlertDialog .setTitle("Title") .setMessage("Message") .setPositiveButton("OK", null) .show(); |
メッセージを表示して「OK」で終了するだけです
ボタン選択でメソッドに連携
選択肢としてボタンを2つ表示して、その選択に応じて何かメソッドにつなげる場合は、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
AlertDialog.Builder builder; builder = new AlertDialog.Builder(this); // タイトル builder.setTitle(R.string.dialog_title); // ポジティブボタン builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // do something } }); // ネガティブボタン builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // do something } }); builder.create(); builder.show(); |
サンプルコード
lambda式を使うとDialogInterface.OnClickListener()など、もっと簡略化できます
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
//package your.package.name; import androidx.appcompat.app.AppCompatActivity; import android.app.AlertDialog; import android.os.Bundle; import android.widget.Button; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.button); button.setOnClickListener( v -> { alertMake(); }); } private void alertMake(){ String strMessage = "Alert Dialogのテストです"; String strOk = "許可されました"; String strCancel = "拒否されました"; AlertDialog.Builder builder; builder = new AlertDialog.Builder(this); builder.setMessage(strMessage); builder.setTitle(R.string.dialog_title); builder.setPositiveButton(R.string.ok, (dialog, id) -> toastMake(strOk)); builder.setNegativeButton(R.string.cancel, (dialog, id) -> toastMake(strCancel)); builder.create(); builder.show(); } private void toastMake(String str){ Toast toast = Toast.makeText(this, str, Toast.LENGTH_SHORT); toast.show(); } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/button" android:text="@string/button" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> |
strings.xml
1 2 3 4 5 6 7 |
<resources> <string name="app_name">TestAlertDialogSimple</string> <string name="button">button</string> <string name="dialog_title">Alert Dialog</string> <string name="ok">OK</string> <string name="cancel">Cancel</string> </resources> |
これで実行してみます
これ以上複雑な実装の場合はDialogFragmentを使う方がいいでしょう
ユーザーに注意を喚起したり何かを選択させたりするのに、ポップアップでAlertDialogを使うと便利です。AlertDialogはDial...
関連ページ:
簡単なAlertDialog
AlertDialog:FragmentDialogを使って設定
AlertDialogに画像を設定
References:
ダイアログ | Android Developers
AlertDialog | Android Developers