अपनी DialogFragmentचौड़ाई और ऊंचाई को नियंत्रित करने का एक तरीका यह है कि यह सुनिश्चित करें कि इसका संवाद आपके दृश्य की चौड़ाई और ऊंचाई का सम्मान करता है यदि उनका मूल्य है WRAP_CONTENT।
का उपयोग करते हुए ThemeOverlay.AppCompat.Dialog
इसे प्राप्त करने का एक सरल तरीका यह है ThemeOverlay.AppCompat.Dialogकि एंड्रॉइड सपोर्ट लाइब्रेरी में शामिल शैली का उपयोग किया जाए ।
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.Dialogशैली का उपयोग नहीं करना चाहते हैं और आपको 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());
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());
}
समाधान 3 (AlertDialog क ) के साथ : लागू करें android:windowMinWidthMinorऔर द्वारा बनाए गए में ।android:windowMinWidthMajorContextThemeWrapperAlertDialog$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();
}