AlertDialog の幅を内容物に合わせて縮める
これを show()
すると、
public class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("hello"); return builder.create(); } }
こうなる。
AlertDialog の幅が内容物に対して広すぎるので、丁度良い大きさに縮めたい。
解決策
テーマを作る
<style name="AppTheme.DialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:windowMinWidthMajor">0%</item> <item name="android:windowMinWidthMinor">0%</item> </style>
parent="Theme.AppCompat.Light.Dialog"
にしても良い。
android:windowMinWidthMajor
は横画面のとき、android:windowMinWidthMinor
は縦画面のときに使われる。
名前空間「android:
」を忘れないように
項目の名前には android:windowMinWidth*
を使うこと。android:
を省いて name="windowMinWidth*"
のように書くと機能しない。
リファレンスにもこう書いてあるよ。
注: それぞれの
<item>
要素でプロパティの名前の前に、android:
名前空間を付けるのを忘れないようにしてください。 たとえば<item name="android:inputType">
のようにします。
Styles and Themes | Android Developers
AlertDialog.Builder
のコンストラクタにテーマを渡す
public class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_DialogTheme); // 第 2 引数でテーマを指定する builder.setMessage("hello"); return builder.create(); } }
完了