Fill_Parent में DialogFragment चौड़ाई कैसे करें


95

मैं एक एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं जहां मैं DialogFragmentसंवाद प्रदर्शित करने के लिए उपयोग कर रहा हूं लेकिन इसकी चौड़ाई बहुत कम है। मैं इसे इसकी चौड़ाई कैसे बना सकता हूं fill_parent?

public class AddNoteDialogFragment extends DialogFragment {

    public AddNoteDialogFragment() {
        // Empty constructor required for DialogFragment
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        getDialog().setTitle(getString(R.string.app_name));
        View view = inflater.inflate(R.layout.fragment_add_note_dialog,
                container);

        return view;
    }


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialog = super.onCreateDialog(savedInstanceState);

        // request a window without the title
        dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        return dialog;
    }
}

fragment_add_note_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin" >

    <EditText
        android:id="@+id/addNoteEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:hint="@string/clock_enter_add_note"
        android:imeOptions="actionDone"
        android:inputType="textCapSentences|textMultiLine"
        android:lines="5" />

    <Button
        android:id="@+id/submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:background="@drawable/login_button"
        android:text="@string/submit_button"
        android:textColor="@android:color/white" />

</LinearLayout>


3
वास्तव में, RelativeLayout का उपयोग करने वाला सटीक लेआउट बहुत अच्छा प्रदर्शित कर रहा है। मैं यह नहीं समझाता हूँ कि ...
Dan Chaltiel

जवाबों:


153

इस समस्या को हल करने के लिए मैंने यह हल निकाला है:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);    
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

@Override
public void onStart() {
    super.onStart();

    Dialog dialog = getDialog();
    if (dialog != null) {
       dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
       dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
}

संपादित करें:

onCrateViewफुलाए गए दृश्य को वापस करने से पहले आप फ्रैगमेंट की विधि में नीचे दिए गए कोड का उपयोग कर सकते हैं ।

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));

3
आप बस कॉल कर सकते हैंdialog.getWindow().setBackgroundDrawable(null);
edwardaa

अगर यह अशक्त हो जाता है, तो यह पारदर्शी नहीं होता है ... केवल काला, 4.0.4 पर
जोआओ पोलो

17
मेरे लिए, यह काम करता है अगर मैं getDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);DialogFragment की onResume()विधि में डालता हूं । यह onCreateView()विधि पर काम नहीं किया । मैं से थोड़ा जवाब संशोधित dialogकरने के लिए getDialog()
रॉक ली

2
setLayoutमें onStartविधि पूरी तरह से काम करता है। धन्यवाद।
वॉनसुक

78

क्या आपने एल्विस के उत्तर का उपयोग करने की कोशिश की है कि अलर्ट डायलॉग को स्क्रीन आकार के 90% कैसे भरें ?

यह निम्नलिखित है:

dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

अपडेट करें:

उपरोक्त onStart()पद्धति के अंदर कोड जोड़ा जाना चाहिए DialogFragment


4
आपने कौन सा लेआउटप्रेम आयात किया?
यमद्रेन्जेन

1
@ymerdrengene वास्तव में बहुत अच्छा सवाल है। कोशिश करो WindowManager.LayoutParams.FILL_PARENT
एपिकपांडाफार्स

2
@ymerdrengene हालांकि तकनीकी रूप से, वे सभी इस मूल्य से विरासत में मिले हैं ViewGroup.LayoutParams, इसलिए यह पूरी तरह से ठीक काम करता है।
एपिकपांडाफर्स

9
इस कोड onStartको काम करने के लिए DialogFragment की विधि में होना चाहिए ।
इबोबोब

1
जैसा कि यहां बताया गया है stackoverflow.com/a/15279400/1641882 मैं इस कोड को आगे बढ़ाने का सुझाव onCreateDialog
दूंगा

52

यह मेरे लिए काम किया है

अपनी कस्टम शैली बनाएं:

   <style name="DialogStyle" parent="Base.Theme.AppCompat.Dialog">
    <item name="android:windowMinWidthMajor">97%</item>
    <item name="android:windowMinWidthMinor">97%</item>
   </style>

आप अपने अन्य संवादों के मिलान के लिए सही माता-पिता का उपयोग करने का भी प्रयास कर सकते हैं। उदाहरण के लिए parent="ThemeOverlay.AppCompat.Dialog"और इतने पर।

इस शैली का उपयोग अपने संवाद में करें

public class MessageDialog extends DialogFragment {

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
}

// your code 
}

3
सुंदर समाधान के साथ <आइटम का नाम = "Android: windowBackground"> ​​@ null </ आइटम>।
एवगेनी सिनिट्स्की

1
महान काम, बहुत बहुत धन्यवाद
हरमन

1
अपने अन्य संवादों के मिलान के लिए सही माता-पिता का उपयोग करने का ध्यान रखें। मेरे मामले में यह
quealegriamasalegre

28

मेरे लिए, यह तब काम किया जब मैंने RelativeLayout द्वारा onCreateView में दिए गए लेआउट के रेखीय लयआउट पैरेंट को बदल दिया। किसी अन्य कोड परिवर्तन की आवश्यकता नहीं है।


6
आमतौर पर, स्टैक ओवरफ्लो पर हमेशा सबसे अलोकप्रिय जवाब मेरी समस्या हल करता है। धन्यवाद
busuu

19
    <!-- A blank view to force the layout to be full-width -->
    <View
        android:layout_width="wrap_content"
        android:layout_height="1dp"
        android:layout_gravity="fill_horizontal" />

मेरे संवाद लेआउट के शीर्ष में चाल चली।


3
यह मेरे लिए काम करता है, और मुझे पसंद है कि हमें कोड में कुछ भी अतिरिक्त जोड़ने की आवश्यकता नहीं है, लेकिन मैं सोच रहा हूं कि यह क्यों काम करता है ...
shela

अविश्वसनीय रूप से, यह केवल एक चीज है जो मेरे लिए काम करती है। कस्टम शैली नहीं थी।
मैग्नस डब्ल्यू

18
public class FullWidthDialogFragment extends AppCompatDialogFragment {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NORMAL, R.style.Theme_AppCompat_Light_Dialog_Alert);
    }
}

और यदि आप और अधिक लचीलापन चाहते हैं तो AppCompat_Dialog_Alert और कस्टम विशेषताओं का विस्तार कर सकते हैं


11

मेरे मामले में मैंने निम्नलिखित दृष्टिकोण का उपयोग किया है:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.dialog_height));
    }
}

लेकिन संवाद के बाएँ और दाएँ किनारों और कुछ लॉलीपॉप + उपकरणों (जैसे नेक्सस 9) पर स्क्रीन किनारों के बीच अभी भी छोटे अंतराल थे ।

यह स्पष्ट नहीं था, लेकिन अंत में मैं पता लगा है कि यह सुनिश्चित करने के लिए पूरी चौड़ाई सभी उपकरणों और प्लेटफ़ॉर्म विंडो पृष्ठभूमि के अंदर निर्दिष्ट किया जाना चाहिए styles.xml निम्नलिखित की तरह:

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

और निश्चित रूप से इस शैली का उपयोग करने की आवश्यकता है जब हम निम्नलिखित की तरह संवाद बनाते हैं:

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}

2
यह स्वीकृत उत्तर होना चाहिए! मुझे इतना समय बचा लिया! खिड़की की पृष्ठभूमि ने चाल चली।
करण

11

अन्य समाधानों के आधार पर, मैंने अपना स्वयं का बनाया है।

<style name="AppTheme.Dialog.Custom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowMinWidthMajor">100%</item>
    <item name="android:windowMinWidthMinor">100%</item>
</style>
abstract class BaseDialogFragment : DialogFragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setStyle(DialogFragment.STYLE_NO_TITLE, R.style.AppTheme_Dialog_Custom)
    }
}

10

मैं यह स्पष्ट करना चाहता हूं। दोनों तरीके सही हैं, लेकिन अलग-अलग संवाद के साथ

का उपयोग करते हुए android.app.DialogFragment

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

का उपयोग करते हुए android.support.v4.app.DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

मूल रूप से मुझे पूरी चौड़ाई की जरूरत थी और यह काम किया। धन्यवाद!
सूद 16००

4

एक और उपाय जो मेरे लिए साइड इफेक्ट्स के बिना काम करता है:

अपनी कक्षा में जो डायलॉगफ्रैगमेंट का विस्तार करती है:

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogStyle);
}

आपकी शैलियों में:

<style name="DialogStyle" parent="ThemeOverlay.AppCompat.Dialog.Alert"></style>

आप सीधे अलर्ट विषय का उपयोग कर सकते हैंsetStyle()
Sony

3

यह मेरे लिए पूरी तरह से काम करता है।

android:minWidth="300dp"

इसके माध्यम से आप संवाद Fragment को चौड़ाई दे सकते हैं।


2

अपनी style.xml फ़ाइल में एक कस्टम शैली बनाएँ। बस इस कोड को अपनी style.xml फ़ाइल में कॉपी करें

<style name="CustomDialog" parent="@android:style/Theme.Holo.Light" >
    <item name="android:windowBackground">@null</item>
    <item name="android:windowIsFloating">true</item>
</style>

फिर अपने DialogFragment के createDialog मेथड में, कोड द्वारा डायलॉग ऑब्जेक्ट बनाएं

 dialog = new Dialog(getActivity(), R.style.CustomDialog);

यह मेरे लिए काम कर रहा है और आशा है कि यह आपकी भी मदद करेगा


मुझे इसे मेरे लिए काम करने के लिए शैली में निम्नलिखित जोड़ना था: <आइटम का नाम = "Android: windowMinWidthMajor"> 100% </ आइटम> <आइटम का नाम = "Android: windowMinWidthMinor": 100% </ आइटम>
अर्नआउट

2

जब मैंने इस समस्या का सामना किया, तो मैंने इसे हल किया। इसे इस्तेमाल करे।

अपने DialogFragment के onActivityCreated में, अपनी आवश्यकता के अनुसार यह कोड जोड़ें ...।

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        myview=inflater.inflate(R.layout.fragment_insurance_detail, container, false);
        intitviews();
        return myview;
    }
    @Override
    public void onActivityCreated(Bundle arg0) {
        super.onActivityCreated(arg0);
        getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        getDialog().getWindow().setGravity(Gravity.CENTER);
    }

1

DialogFragment के onCreateView मेथड में इसका उपयोग करें

    Display display = getActivity().getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, **220**, getResources().getDisplayMetrics());
    getDialog().getWindow().setLayout(width,px);

220 संवाद खंड ऊंचाई है, इसे यू इच्छा के रूप में बदलें


1

अपने संवाद के अंदर उपयोगकर्ता AlertDialog.Builder। इसे onCreateDialogइस तरह से विधि में जोड़ें । और onCreateViewकुछ न करने में।

public Dialog onCreateDialog(Bundle savedInstanceState)
{

    AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    View view = LayoutInflater.from(getContext()).inflate(R.layout.gf_confirm_order_timeout_dialog, null);
    final Bundle args = getArguments();
    String message = args.getString(GfConstant.EXTRA_DATA);
    TextView txtMessage = (TextView) view.findViewById(R.id.txt_message);
    txtMessage.setText(message);

    view.findViewById(R.id.btn_confirm).setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (mListener != null)
            {
                mListener.onDialogConfirmOK();
            }
        }
    });
    builder.setView(view);
    Dialog dialog = builder.create();
    dialog.setCanceledOnTouchOutside(false);
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    return dialog;
}

1

अपने लेआउट रूट में, android सेट करें: minWidth को एक बहुत बड़े मूल्य जैसे

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="9999999dp">

   ...

</LinearLayout>

0

मैंने ऊपर सूचीबद्ध कई उत्तरों की कोशिश की; उन्होंने मेरे लिए काम नहीं किया। यह मेरी समस्या का समाधान है:

में DialogFragment()नीचे दिए गए कोड जोड़ें:

override fun onResume() {
    super.onResume()
    if (showsDialog) {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.WRAP_CONTENT
        dialog?.window?.apply {
            setBackgroundDrawable(ColorDrawable(Color.WHITE))
            attributes.gravity = Gravity.BOTTOM
            setLayout(width, height)
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.