अपनी 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: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();
}