ダイアログは、操作するようユーザーに促す 追加情報を入力できますダイアログが画面全体に表示されず、 通常は、ユーザーが操作を行う前にアクションを起こす必要があるモーダル イベントに使用されます。 続行できます。
<ph type="x-smartling-placeholder">で確認できます。 <ph type="x-smartling-placeholder">Dialog
クラスはダイアログの基本クラスですが、Dialog
はインスタンス化しません
直接渡されます。代わりに、次のいずれかのサブクラスを使用します。
AlertDialog
- タイトル、最大 3 つのボタン、選択可能なリストを表示するダイアログ カスタムレイアウトを作成することもできます。
DatePickerDialog
またはTimePickerDialog
- ユーザーが日付や日付を選択できる、事前定義された UI のダイアログ あります。 で確認できます。
これらのクラスは、ダイアログのスタイルと構造を定義します。さらに
DialogFragment
使用します。DialogFragment
クラスは、
ダイアログの作成と表示の管理に必要なすべてのコントロール
Dialog
オブジェクトのメソッドを呼び出す代わりに、
DialogFragment
を使用してダイアログを管理すると、正しく表示される
ライフサイクル イベント(ユーザーが [戻る] ボタンをタップしたときや回転したときなど)を処理する
画面に表示されます。DialogFragment
クラスを使用すると、
大きな UI に埋め込み可能なコンポーネントとして
伝統的
Fragment
など
大小で異なるダイアログ UI を表示する場合などに便利です。
あります。
このドキュメントの以降のセクションでは、
DialogFragment
と AlertDialog
の組み合わせ
渡されます。日付または時刻の選択ツールを作成する場合は、
選択ツールを
アプリ。
ダイアログ フラグメントを作成する
カスタム プロンプトを含め、さまざまなダイアログ デザインを作成できます。
記載されているものや、
マテリアル デザイン
ダイアログ - DialogFragment
を拡張して
次における AlertDialog
:
onCreateDialog()
コールバック メソッドを指定します。
たとえば、次のような基本的な AlertDialog
は、
DialogFragment
:
Kotlin
class StartGameDialogFragment : DialogFragment() { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return activity?.let { // Use the Builder class for convenient dialog construction. val builder = AlertDialog.Builder(it) builder.setMessage("Start game") .setPositiveButton("Start") { dialog, id -> // START THE GAME! } .setNegativeButton("Cancel") { dialog, id -> // User cancelled the dialog. } // Create the AlertDialog object and return it. builder.create() } ?: throw IllegalStateException("Activity cannot be null") } } class OldXmlActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_old_xml) StartGameDialogFragment().show(supportFragmentManager, "GAME_DIALOG") } }
Java
public class StartGameDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.dialog_start_game) .setPositiveButton(R.string.start, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // START THE GAME! } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancels the dialog. } }); // Create the AlertDialog object and return it. return builder.create(); } } // ... StartGameDialogFragment().show(supportFragmentManager, "GAME_DIALOG");
このクラスのインスタンスを作成して
show()
下図のようなダイアログが表示されます。
![2 つの操作ボタンがある基本的なダイアログを示す画像](https://developer.android.com/static/images/ui/dialog_buttons.png?authuser=9&hl=ja)
次のセクションでは、
AlertDialog.Builder
ダイアログを作成するための API。
ダイアログの複雑さに応じて、さまざまな機能を実装できます
DialogFragment
にある他のコールバック メソッド(すべての
基本的なフラグメント ライフサイクル メソッド。
アラート ダイアログを作成する
AlertDialog
クラスを使用すると、さまざまなダイアログを作成できます。
多くの場合、必要なダイアログ クラスはこれだけです。次の例をご覧ください。
図に示すように、アラート ダイアログには 3 つの領域があります。
- Title: 省略可。コンテンツ領域が 詳細なメッセージ、リスト、またはカスタム レイアウトが占有されている場合。必要に応じて 簡単なメッセージや質問を述べる場合、タイトルは必要ありません。
- コンテンツ エリア: メッセージ、リスト、その他のカスタム できます。
- 操作ボタン: 1 つのスペースに最大 3 つの操作ボタンを配置できます。 クリックします。
AlertDialog.Builder
クラスは、
この種のコンテンツを含む AlertDialog
できます。
AlertDialog
をビルドする手順は次のとおりです。
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setMessage("I am the message") .setTitle("I am the title") val dialog: AlertDialog = builder.create() dialog.show()
Java
// 1. Instantiate an AlertDialog.Builder with its constructor. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // 2. Chain together various setter methods to set the dialog characteristics. builder.setMessage(R.string.dialog_message) .setTitle(R.string.dialog_title); // 3. Get the AlertDialog. AlertDialog dialog = builder.create();
上記のコード スニペットでは、次のダイアログが生成されます。
![タイトル、コンテンツ領域、2 つの操作ボタンがあるダイアログを示す画像。](https://developer.android.com/static/images/ui/alert_dialog_1.png?authuser=9&hl=ja)
ボタンを追加する
図 2 のような操作ボタンを追加するには、
setPositiveButton()
および
setNegativeButton()
メソッド:
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setMessage("I am the message") .setTitle("I am the title") .setPositiveButton("Positive") { dialog, which -> // Do something. } .setNegativeButton("Negative") { dialog, which -> // Do something else. } val dialog: AlertDialog = builder.create() dialog.show()
Java
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // Add the buttons. builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User taps OK button. } }); builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancels the dialog. } }); // Set other dialog properties. ... // Create the AlertDialog. AlertDialog dialog = builder.create();
set...Button()
メソッドには、
ボタン。
文字列リソース
DialogInterface.OnClickListener
ユーザーがボタンをタップしたときに実行するアクションを定義します。
追加できる操作ボタンは 3 つあります。
- ポジティブ: これを使用して、アクションを受け入れて続行します( 「OK」アクション)。
- ネガティブ: アクションをキャンセルするために使用します。
- どちらとも言えない: ユーザーが次の手続きへの続行を希望しない可能性がある場合に使用します。 キャンセルは必要ございませんこれは プラスボタンとネガティブボタン。たとえば、「うっかりアラートを通知して」 後で説明します
AlertDialog
に追加できるボタンは各タイプごとに 1 つだけです。対象
たとえば 1 つの単語に「肯定的」または] ボタンを離します。
上記のコード スニペットでは、次のようなアラート ダイアログが表示されます。
![タイトル、メッセージ、2 つの操作ボタンがあるアラート ダイアログを示す画像。](https://developer.android.com/static/images/ui/alert_dialog_2.png?authuser=9&hl=ja)
リストを追加する
AlertDialog
で使用できるリストには 3 種類あります。
API:
- 従来の選択式リスト。
- 永続的な選択リスト(ラジオボタン)。
- 永続的な多肢選択式リスト(チェックボックス)。
図 5 のような単一選択リストを作成するには、
setItems()
メソッド:
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setTitle("I am the title") .setPositiveButton("Positive") { dialog, which -> // Do something. } .setNegativeButton("Negative") { dialog, which -> // Do something else. } .setItems(arrayOf("Item One", "Item Two", "Item Three")) { dialog, which -> // Do something on item tapped. } val dialog: AlertDialog = builder.create() dialog.show()
Java
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.pick_color) .setItems(R.array.colors_array, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // The 'which' argument contains the index position of the selected item. } }); return builder.create(); }
このコード スニペットにより、次のようなダイアログが生成されます。
![タイトルとリストを含むダイアログを示す画像。](https://developer.android.com/static/images/ui/alert_dialog_3.png?authuser=9&hl=ja)
リストはダイアログのコンテンツ領域に表示されるため、ダイアログに
同じです。ダイアログのタイトルを
setTitle()
。
リストのアイテムを指定するには、setItems()
を呼び出して
あります。別の方法として、
setAdapter()
。
これにより、
作成するために使用できる
ListAdapter
。
ListAdapter
でリストを返す場合は、常に
Loader
コンテンツを非同期で読み込むようにしますこれについては
レイアウトを作成する
アダプターを使用
ローダ。
永続的な多肢選択式または単一選択のリストを追加する
多肢選択式項目(チェックボックス)または単一選択項目のリストを追加するには
使用する場合は、
setMultiChoiceItems()
または
setSingleChoiceItems()
あります。
たとえば、次のような多肢選択式リストを作成できます。
図 6 に示すとおり、選択したアイテムを
ArrayList
:
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setTitle("I am the title") .setPositiveButton("Positive") { dialog, which -> // Do something. } .setNegativeButton("Negative") { dialog, which -> // Do something else. } .setMultiChoiceItems( arrayOf("Item One", "Item Two", "Item Three"), null) { dialog, which, isChecked -> // Do something. } val dialog: AlertDialog = builder.create() dialog.show()
Java
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { selectedItems = new ArrayList(); // Where we track the selected items AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // Set the dialog title. builder.setTitle(R.string.pick_toppings) // Specify the list array, the items to be selected by default (null for // none), and the listener through which to receive callbacks when items // are selected. .setMultiChoiceItems(R.array.toppings, null, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked) { // If the user checks the item, add it to the selected // items. selectedItems.add(which); } else if (selectedItems.contains(which)) { // If the item is already in the array, remove it. selectedItems.remove(which); } } }) // Set the action buttons .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // User taps OK, so save the selectedItems results // somewhere or return them to the component that opens the // dialog. ... } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { ... } }); return builder.create(); }
![多肢選択式アイテムのリストを含むダイアログを示す画像。](https://developer.android.com/static/images/ui/alert_dialog_4.png?authuser=9&hl=ja)
単一選択のアラート ダイアログは、次のようにして取得できます。
Kotlin
val builder: AlertDialog.Builder = AlertDialog.Builder(context) builder .setTitle("I am the title") .setPositiveButton("Positive") { dialog, which -> // Do something. } .setNegativeButton("Negative") { dialog, which -> // Do something else. } .setSingleChoiceItems( arrayOf("Item One", "Item Two", "Item Three"), 0 ) { dialog, which -> // Do something. } val dialog: AlertDialog = builder.create() dialog.show()
Java
String[] choices = {"Item One", "Item Two", "Item Three"}; AlertDialog.Builder builder = AlertDialog.Builder(context); builder .setTitle("I am the title") .setPositiveButton("Positive", (dialog, which) -> { }) .setNegativeButton("Negative", (dialog, which) -> { }) .setSingleChoiceItems(choices, 0, (dialog, which) -> { }); AlertDialog dialog = builder.create(); dialog.show();
結果は次のようになります。
![単一選択項目のリストを含むダイアログを示す画像。](https://developer.android.com/static/images/ui/alert_dialog_5.png?authuser=9&hl=ja)
カスタム レイアウトを作成する
ダイアログでカスタム レイアウトが必要な場合は、レイアウトを作成して
呼び出しで AlertDialog
setView()
を AlertDialog.Builder
オブジェクトに追加します。
![カスタム ダイアログ レイアウトを示す画像。](https://developer.android.com/static/images/ui/dialog_custom.png?authuser=9&hl=ja)
デフォルトでは、カスタム レイアウトはダイアログ ウィンドウ全体に表示されますが、
ボタンとタイトルを追加する AlertDialog.Builder
メソッド。
上記のカスタム ダイアログのレイアウト ファイルの例を以下に示します。 レイアウト:
res/layout/dialog_signin.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:src="@drawable/header_logo" android:layout_width="match_parent" android:layout_height="64dp" android:scaleType="center" android:background="#FFFFBB33" android:contentDescription="@string/app_name" /> <EditText android:id="@+id/username" android:inputType="textEmailAddress" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_marginBottom="4dp" android:hint="@string/username" /> <EditText android:id="@+id/password" android:inputType="textPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:layout_marginLeft="4dp" android:layout_marginRight="4dp" android:layout_marginBottom="16dp" android:fontFamily="sans-serif" android:hint="@string/password"/> </LinearLayout>
DialogFragment
でレイアウトをインフレートするには、
LayoutInflater
getLayoutInflater()
呼び出し
inflate()
。
1 つ目のパラメータはレイアウト リソース ID、2 つ目のパラメータは
子ビューを作成します。その後、
setView()
ダイアログにレイアウトを配置できますこれを次の例に示します。
Kotlin
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return activity?.let { val builder = AlertDialog.Builder(it) // Get the layout inflater. val inflater = requireActivity().layoutInflater; // Inflate and set the layout for the dialog. // Pass null as the parent view because it's going in the dialog // layout. builder.setView(inflater.inflate(R.layout.dialog_signin, null)) // Add action buttons. .setPositiveButton(R.string.signin, DialogInterface.OnClickListener { dialog, id -> // Sign in the user. }) .setNegativeButton(R.string.cancel, DialogInterface.OnClickListener { dialog, id -> getDialog().cancel() }) builder.create() } ?: throw IllegalStateException("Activity cannot be null") }
Java
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); // Get the layout inflater. LayoutInflater inflater = requireActivity().getLayoutInflater(); // Inflate and set the layout for the dialog. // Pass null as the parent view because it's going in the dialog layout. builder.setView(inflater.inflate(R.layout.dialog_signin, null)) // Add action buttons .setPositiveButton(R.string.signin, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // Sign in the user. } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { LoginDialogFragment.this.getDialog().cancel(); } }); return builder.create(); }
カスタム ダイアログが必要な場合は、代わりに
次のユーザー: Activity
:
Dialog
API を使用する代わりに、アクティビティを作成し、
テーマを
Theme.Holo.Dialog
の
<activity>
マニフェスト要素:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
アクティビティが全画面ではなく、ダイアログ ウィンドウに表示されます。
ダイアログのホストにイベントを渡す
ユーザーがダイアログのアクション ボタンのいずれかをタップしたか、アイテムを選択したとき
DialogFragment
は必要な処理を実行する場合があります。
通常はアクション自体をアクティビティにのみ配信しますが、
このフラグメントを指定します。これを行うには、次のメソッドを使用してインターフェースを定義します。
クリックイベントのタイプごとに
1 つの広告ユニットを作成します次に、そのインターフェースをホスト
このコンポーネントは、ダイアログからアクション イベントを受け取るコンポーネントです。
たとえば、次の DialogFragment
はインターフェースを定義します。
ホスト アクティビティにイベントを返します。
Kotlin
class NoticeDialogFragment : DialogFragment() { // Use this instance of the interface to deliver action events. internal lateinit var listener: NoticeDialogListener // The activity that creates an instance of this dialog fragment must // implement this interface to receive event callbacks. Each method passes // the DialogFragment in case the host needs to query it. interface NoticeDialogListener { fun onDialogPositiveClick(dialog: DialogFragment) fun onDialogNegativeClick(dialog: DialogFragment) } // Override the Fragment.onAttach() method to instantiate the // NoticeDialogListener. override fun onAttach(context: Context) { super.onAttach(context) // Verify that the host activity implements the callback interface. try { // Instantiate the NoticeDialogListener so you can send events to // the host. listener = context as NoticeDialogListener } catch (e: ClassCastException) { // The activity doesn't implement the interface. Throw exception. throw ClassCastException((context.toString() + " must implement NoticeDialogListener")) } } }
Java
public class NoticeDialogFragment extends DialogFragment { // The activity that creates an instance of this dialog fragment must // implement this interface to receive event callbacks. Each method passes // the DialogFragment in case the host needs to query it. public interface NoticeDialogListener { public void onDialogPositiveClick(DialogFragment dialog); public void onDialogNegativeClick(DialogFragment dialog); } // Use this instance of the interface to deliver action events. NoticeDialogListener listener; // Override the Fragment.onAttach() method to instantiate the // NoticeDialogListener. @Override public void onAttach(Context context) { super.onAttach(context); // Verify that the host activity implements the callback interface. try { // Instantiate the NoticeDialogListener so you can send events to // the host. listener = (NoticeDialogListener) context; } catch (ClassCastException e) { // The activity doesn't implement the interface. Throw exception. throw new ClassCastException(activity.toString() + " must implement NoticeDialogListener"); } } ... }
ダイアログをホストするアクティビティは、
ダイアログ フラグメントのコンストラクタを呼び出して、ダイアログのイベントを
NoticeDialogListener
インターフェースの実装:
Kotlin
class MainActivity : FragmentActivity(), NoticeDialogFragment.NoticeDialogListener { fun showNoticeDialog() { // Create an instance of the dialog fragment and show it. val dialog = NoticeDialogFragment() dialog.show(supportFragmentManager, "NoticeDialogFragment") } // The dialog fragment receives a reference to this Activity through the // Fragment.onAttach() callback, which it uses to call the following // methods defined by the NoticeDialogFragment.NoticeDialogListener // interface. override fun onDialogPositiveClick(dialog: DialogFragment) { // User taps the dialog's positive button. } override fun onDialogNegativeClick(dialog: DialogFragment) { // User taps the dialog's negative button. } }
Java
public class MainActivity extends FragmentActivity implements NoticeDialogFragment.NoticeDialogListener{ ... public void showNoticeDialog() { // Create an instance of the dialog fragment and show it. DialogFragment dialog = new NoticeDialogFragment(); dialog.show(getSupportFragmentManager(), "NoticeDialogFragment"); } // The dialog fragment receives a reference to this Activity through the // Fragment.onAttach() callback, which it uses to call the following // methods defined by the NoticeDialogFragment.NoticeDialogListener // interface. @Override public void onDialogPositiveClick(DialogFragment dialog) { // User taps the dialog's positive button. ... } @Override public void onDialogNegativeClick(DialogFragment dialog) { // User taps the dialog's negative button. ... } }
ホスト アクティビティは
NoticeDialogListener
- これは
onAttach()
コールバック メソッドを呼び出し、このダイアログ フラグメントは
インターフェース コールバック メソッドを使用して、アクティビティにクリック イベントを配信します。
Kotlin
override fun onCreateDialog(savedInstanceState: Bundle): Dialog { return activity?.let { // Build the dialog and set up the button click handlers. val builder = AlertDialog.Builder(it) builder.setMessage(R.string.dialog_start_game) .setPositiveButton(R.string.start, DialogInterface.OnClickListener { dialog, id -> // Send the positive button event back to the // host activity. listener.onDialogPositiveClick(this) }) .setNegativeButton(R.string.cancel, DialogInterface.OnClickListener { dialog, id -> // Send the negative button event back to the // host activity. listener.onDialogNegativeClick(this) }) builder.create() } ?: throw IllegalStateException("Activity cannot be null") }
Java
public class NoticeDialogFragment extends DialogFragment { ... @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Build the dialog and set up the button click handlers. AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage(R.string.dialog_start_game) .setPositiveButton(R.string.start, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Send the positive button event back to the host activity. listener.onDialogPositiveClick(NoticeDialogFragment.this); } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // Send the negative button event back to the host activity. listener.onDialogNegativeClick(NoticeDialogFragment.this); } }); return builder.create(); } }
ダイアログを表示する
ダイアログを表示するには、
DialogFragment
と通話
show()
,
渡す
FragmentManager
ダイアログ フラグメントのタグ名を指定します。
FragmentManager
を取得するには、次の関数を呼び出します。
getSupportFragmentManager()
取得
FragmentActivity
または
getParentFragmentManager()
Fragment
から。以下の例をご覧ください。
Kotlin
fun confirmStartGame() { val newFragment = StartGameDialogFragment() newFragment.show(supportFragmentManager, "game") }
Java
public void confirmStartGame() { DialogFragment newFragment = new StartGameDialogFragment(); newFragment.show(getSupportFragmentManager(), "game"); }
2 番目の引数 "game"
は、
は、必要に応じてフラグメントの状態を保存および復元するために使用されます。また、このタグは
を使用すると、
findFragmentByTag()
。
ダイアログを全画面表示、または埋め込みフラグメントとして表示する
UI デザインの一部がダイアログとして表示されるようにしたい場合があります。
全画面または埋め込みフラグメントとして表示できます。また、
デバイスの画面サイズに応じて表示したい場合があります。「
DialogFragment
クラスでは、これを柔軟に行うことができます。
埋め込み可能な Fragment
として動作できるためです。
ただし、AlertDialog.Builder
やその他の
Dialog
オブジェクトを使用してダイアログを作成します。もし
DialogFragment
を埋め込み可能にするには、ダイアログの UI を
そのレイアウトをモジュールに読み込み
onCreateView()
呼び出すことができます。
次に、ダイアログとして表示できる DialogFragment
の例を示します。
というレイアウトを使用して、埋め込み可能なフラグメントを作成します。
purchase_items.xml
:
Kotlin
class CustomDialogFragment : DialogFragment() { // The system calls this to get the DialogFragment's layout, regardless of // whether it's being displayed as a dialog or an embedded fragment. override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { // Inflate the layout to use as a dialog or embedded fragment. return inflater.inflate(R.layout.purchase_items, container, false) } // The system calls this only when creating the layout in a dialog. override fun onCreateDialog(savedInstanceState: Bundle): Dialog { // The only reason you might override this method when using // onCreateView() is to modify the dialog characteristics. For example, // the dialog includes a title by default, but your custom layout might // not need it. Here, you can remove the dialog title, but you must // call the superclass to get the Dialog. val dialog = super.onCreateDialog(savedInstanceState) dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) return dialog } }
Java
public class CustomDialogFragment extends DialogFragment { // The system calls this to get the DialogFragment's layout, regardless of // whether it's being displayed as a dialog or an embedded fragment. @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout to use as a dialog or embedded fragment. return inflater.inflate(R.layout.purchase_items, container, false); } // The system calls this only when creating the layout in a dialog. @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // The only reason you might override this method when using // onCreateView() is to modify the dialog characteristics. For example, // the dialog includes a title by default, but your custom layout might // not need it. Here, you can remove the dialog title, but you must // call the superclass to get the Dialog. Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); return dialog; } }
次の例では、フラグメントをダイアログとして表示するか、 次のように、画面サイズに基づく全画面 UI を作成します。
Kotlin
fun showDialog() { val fragmentManager = supportFragmentManager val newFragment = CustomDialogFragment() if (isLargeLayout) { // The device is using a large layout, so show the fragment as a // dialog. newFragment.show(fragmentManager, "dialog") } else { // The device is smaller, so show the fragment fullscreen. val transaction = fragmentManager.beginTransaction() // For a polished look, specify a transition animation. transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) // To make it fullscreen, use the 'content' root view as the container // for the fragment, which is always the root view for the activity. transaction .add(android.R.id.content, newFragment) .addToBackStack(null) .commit() } }
Java
public void showDialog() { FragmentManager fragmentManager = getSupportFragmentManager(); CustomDialogFragment newFragment = new CustomDialogFragment(); if (isLargeLayout) { // The device is using a large layout, so show the fragment as a // dialog. newFragment.show(fragmentManager, "dialog"); } else { // The device is smaller, so show the fragment fullscreen. FragmentTransaction transaction = fragmentManager.beginTransaction(); // For a polished look, specify a transition animation. transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); // To make it fullscreen, use the 'content' root view as the container // for the fragment, which is always the root view for the activity. transaction.add(android.R.id.content, newFragment) .addToBackStack(null).commit(); } }
フラグメント トランザクションの実行について詳しくは、以下をご覧ください。 フラグメント。
この例では、ブール値 mIsLargeLayout
に、
現在のデバイスでは、アプリの大きなレイアウト デザインを使用する必要があるため、
全画面表示ではなくダイアログとして表示できます。この種のイベントを
ブール値変数を宣言するには、
ブール値リソース
value を
代替
resource 値を使用します。例として、異なる画面サイズのブールリソースを 2 種類示します。
res/values/bools.xml
<!-- Default boolean values --> <resources> <bool name="large_layout">false</bool> </resources>
res/values-large/bools.xml
<!-- Large screen boolean values --> <resources> <bool name="large_layout">true</bool> </resources>
次に、初期化中に mIsLargeLayout
値を初期化します。
アクティビティの
onCreate()
メソッドを呼び出します。
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) isLargeLayout = resources.getBoolean(R.bool.large_layout) }
Java
boolean isLargeLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); isLargeLayout = getResources().getBoolean(R.bool.large_layout); }
大画面でアクティビティをダイアログとして表示する
小さな画面でダイアログを全画面 UI として表示する代わりに、
Activity
を大きなサイズのダイアログとして表示しても、同じ結果になります。
あります。どのアプローチを選ぶかはアプリの設計によって異なりますが、
アクティビティをダイアログとして利用すると、アプリが
タブレットでのエクスペリエンスを改善するために、
一時的なアクティビティをダイアログとして表示できます。
大画面でのみアクティビティをダイアログとして表示するには、
Theme.Holo.DialogWhenLarge
<activity>
マニフェスト要素に追加します。
<activity android:theme="@android:style/Theme.Holo.DialogWhenLarge" >
テーマを使用したアクティビティのスタイル設定について詳しくは、以下をご覧ください。 スタイルとテーマ。
ダイアログを閉じる
ユーザーがスペースで作成されたアクション ボタンをタップすると、
AlertDialog.Builder
の場合、ダイアログは閉じます。
また、ユーザーがダイアログ内のアイテムをタップすると、ダイアログが閉じます。
ラジオボタンやチェックボックスを使用する場合を除きます。それ以外の場合は、
手動でダイアログを閉じるには
dismiss()
DialogFragment
。
ダイアログが消えた後に特定の操作を実行する必要がある場合は、
実装する
onDismiss()
メソッドを DialogFragment
で宣言します。
ダイアログをキャンセルすることもできます。特別なイベントであり
ユーザーがタスクを完了せずにダイアログを閉じたことを示します。この
ユーザーが [戻る] ボタンをタップしたか、ダイアログの外側で画面をタップしたときに発生します。
明示的に呼び出した場合には、
cancel()
Dialog
で(「キャンセル」に応答するなど)] ボタンを
クリックします。
上記の例に示すように、キャンセル イベントに応答するには、
実装
onCancel()
DialogFragment
クラスで宣言します。