質問: ### fragmentで作った画面でMainを覆うには fragmentでオプション画面を作ったのですが、以下の画像のようにMainのActivityのボタン(GAME STARTなど)浮き上がってきてしまいます。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/072227760394ea649c36ccfc61ec5adc.png) これはどうすれば解決できるのでしょうか・・・ Dialog fragmetを使うことを考えましたが、ボタンが三つしかつけられないので、拡張性がないことから却下しました。また、Activityを使い、周りを半透明にするのも考えましたが、何やら動きが遅くなるらしいので、使うのがためらわれます・・・ この浮き出てくるボタンを沈ませるにはどうすればよいのでしょうか? ご教授お願いします!!! ーーー追加ーーー これが私の実現したい画面です! ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/d3dc40d533b3dcb42d01d77af3416180.png)
回答: コードを載せていただいていないのでとりあえず方針です。 背景を半透明にしたレイアウトの中にオプション画面を入れ、そのレイアウトをFragmentに設定して画面全体に表示されるよう配置すればいいと思います。 別解: DialogFragmentでもそのような画面は実現可能です。 > > Dialog fragmetを使うことを考えましたが、ボタンが三つしかつけられないので、拡張性がないことから却下しました。 > > > AlertDialogが用意しているボタン設定メソッド(setPositiveButtonなど)を使えばそうなりますが、AlertDialogには自分で作成したレイアウトを設定することができるので、その中にボタンを置けば自由な配置が可能です。 ``` // DialogFragment onCreateDialogの実装例 @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // レイアウトxmlからレイアウトを生成 View layout = View.inflate(getContext(), R.layout.xxx, null); // layout内のボタンイベントなどを設定 Button button = layout.findViewById(R.id.button); button.setOnClickListener(...); return new AlertDialog.Builder(getContext()) .setView(layout) // レイアウトをセット .create(); } ```