DialogFragment너비와 높이 를 제어하는 한 가지 방법 은 값이 인 경우 대화 상자가보기의 너비와 높이를 존중하도록하는 것입니다 WRAP_CONTENT.
사용 ThemeOverlay.AppCompat.Dialog
이를 달성하는 간단한 방법 중 하나 ThemeOverlay.AppCompat.Dialog는 Android 지원 라이브러리에 포함 된 스타일을 사용하는 것 입니다.
DialogFragment로 Dialog:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext(), R.style.ThemeOverlay_AppCompat_Dialog);
dialog.setContentView(view);
return dialog;
}
DialogFragment와 AlertDialog(주의 : minHeight="48dp") :
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.ThemeOverlay_AppCompat_Dialog);
builder.setView(view);
return builder.create();
}
ThemeOverlay.AppCompat.Dialog대화 상자를 만들 때 앱의 xml 테마에 대화 상자를 추가하여 기본 테마로 설정할 수도 있습니다 .
많은 대화 상자가 제대로 보이도록 기본 최소 너비가 필요하므로주의하십시오.
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- For Android Dialog. -->
<item name="android:dialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- For Android AlertDialog. -->
<item name="android:alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- For AppCompat AlertDialog. -->
<item name="alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- Other attributes. -->
</style>
DialogFragment과 Dialog의 사용을 만드는 android:dialogTheme:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext());
dialog.setContentView(view);
return dialog;
}
DialogFragment와 함께 AlertDialog사용 android:alertDialogTheme하거나 alertDialogTheme(캐비티 :) minHeight="48dp":
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setView(view);
return builder.create();
}
보너스
이전 Android API에서는 Dialog제목으로 인해 너비 문제가있는 것 같습니다 (설정하지 않은 경우에도). 스타일
을 사용 하지 않고 제목이 필요하지 않은 경우 (또는 사용자 지정 제목이있는 경우) 비활성화 할 수 있습니다.ThemeOverlay.AppCompat.DialogDialog
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
return dialog;
}
오래된 답변, 대부분의 경우 작동하지 않습니다
프로그래밍 방식으로 고정 크기를 지정하지 않고 대화 상자에서 레이아웃의 너비와 높이를 존중하려고했습니다.
나는 그것을 생각 android:windowMinWidthMinor하고 android:windowMinWidthMajor문제의 원인이되었다. 비록 내 Activity또는 의 주제에 포함되지 않았지만 Dialog여전히 Activity주제 에 적용되고있었습니다 .
나는 세 가지 가능한 해결책을 생각해 냈습니다.
해결 방법 1 : 사용자 정의 대화 상자 테마를 만들고에서 대화 상자를 만들 때 사용하십시오 DialogFragment.
<style name="Theme.Material.Light.Dialog.NoMinWidth" parent="android:Theme.Material.Light.Dialog">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), R.style.Theme_Material_Light_Dialog_NoMinWidth);
}
해결 방법 2 : 대화 상자 ContextThemeWrapper와 같은 역할을 하는 사용자 지정 테마를 만듭니다 Context. 사용자 정의 대화 상자 테마를 작성하지 않으려는 경우 (예 :에 의해 지정된 테마를 사용하려는 경우)이를 사용하십시오 android:dialogTheme.
<style name="Theme.Window.NoMinWidth" parent="">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(new ContextThemeWrapper(getActivity(), R.style.Theme_Window_NoMinWidth), getTheme());
}
(AN과 해결책 3 AlertDialog) 적용 android:windowMinWidthMinor및 android:windowMinWidthMajor에 ContextThemeWrapper의해 생성 AlertDialog$Builder.
<style name="Theme.Window.NoMinWidth" parent="">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public final Dialog onCreateDialog(Bundle savedInstanceState) {
View view = new View(); // Inflate your view here.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view);
// Make sure the dialog width works as WRAP_CONTENT.
builder.getContext().getTheme().applyStyle(R.style.Theme_Window_NoMinWidth, true);
return builder.create();
}