Android में फुल स्क्रीन डायलॉगफ्रेममेंट


165

मैं लगभग फुलस्क्रीन डायलॉगफ्रेममेंट दिखाने की कोशिश कर रहा हूं। लेकिन मैं किसी तरह ऐसा नहीं कर पा रहा हूं।

जिस तरह से मैं फ्रैगमेंट दिखा रहा हूं वह सीधे एंड्रॉइड डेवलपर डॉक्यूमेंटेशन से है

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

मुझे पता है कि भोलेपन से RelativeLayout को fill_parent और कुछ minWidth और minHidight में सेट करने की कोशिश की।

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

मुझे पता है कि डायलॉगफ्रेग्मेंट स्क्रीन के बहुमत को भरने की उम्मीद करेगा। लेकिन मैं केवल क्षैतिज रूप से ही आकार देता हूं, लेकिन केवल कुछ निश्चित चौड़ाई क्षैतिज रूप से।

मैंने कोड में विंडो अटैचमेंट्स को सेट करने का भी प्रयास किया, जैसा कि यहाँ सुझाया गया है: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec । लेकिन इससे भी मदद नहीं मिली।

मैं शायद कुछ गलत समझ रहा हूं कि एंड्रॉइड डायलॉग्स को कैसे संभालता है, क्योंकि मैं इसके लिए बिल्कुल नया हूं। मैं ऐसा कुछ कैसे कर सकता हूं? क्या मेरे लक्ष्य तक पहुँचने के लिए कोई वैकल्पिक उपाय हैं?


Android डिवाइस:
Asus EeePad ट्रांसफार्मर
एंड्रॉइड 3.0.1


अद्यतन: मैं अब इसे पूर्ण स्क्रीन में लाने में कामयाब रहा, टुकड़े में निम्न कोड के साथ

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

दुर्भाग्य से, यह बिल्कुल नहीं है जो मैं चाहता हूं। मुझे निश्चित रूप से पृष्ठभूमि दिखाने के लिए संवाद के चारों ओर एक छोटे से "पैडिंग" की आवश्यकता है।

किसी भी विचार है कि कैसे पूरा करने के लिए?


2
अच्छा पढ़ें: techrepublic.com/article/…
kouretinho

आप अपना समय, tysm
अरुल मणि

जवाबों:


73

LinearLayoutइसके बजाय स्विच करने का प्रयास करें RelativeLayout। मैं परीक्षण करते समय 3.0 हनीकॉम्ब एपीआई को लक्षित कर रहा था।

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

और लेआउट : fragment_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:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

और मेरे लिए, मुझे एक RelativeLayout का उपयोग करने की आवश्यकता थी, लेकिन संवाद चौड़ाई सामग्री को ठीक से समायोजित नहीं कर रही थी, इसलिए मैंने एक रैखिक में RelativeLayout का नामकरण किया जिसका एकमात्र बच्चा RelativeLayout था ... ने उचित चौड़ाई समायोजन ट्रिगर किया।
पीटर अज़ताई

1
मैंने हर चीज का परीक्षण किया, लेकिन मैं केवल उसी चीज की पुष्टि कर सकता हूं जो मेरे डायलॉगफ्रेगमेंट के लिए काम करती है, मेरे पूरे लेआउट को लिनियरलआउट में लपेट रही थी। इस तरह मैं इस पर चौड़ाई और मेरे (अब लिपटे) मूल लेआउट ... बर्बाद घंटे की ऊंचाई सेट कर सकते हैं
जब तक

6
MinWidth और MinHeight की स्थापना करना कुछ बड़ा होना महत्वपूर्ण हिस्सा लगता है; लेकिन यह एक साफ समाधान के बजाय एक हैक है। नीचे दिए गए @ डेविड द्वारा दिए गए उत्तर - आगे दिए गए लिंक में बताया गया है - यह भी काम करता है और साफ है।
गार्लेफ वीगार्ट

@ tir38 मुझे नहीं लगता कि यह सच है क्योंकि onCreateDialog () में पहले से ही सुपरक्लास का कार्यान्वयन है।
स्टार्कजे 2

यह स्वीकृत उत्तर होना चाहिए। विस्तृत और स्पष्ट
मुलेमुले

179

पूर्ण स्क्रीन पर DialogFragment प्राप्त करने के लिए

onStartइस तरह आपके 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);
    }
}

और इस पोस्ट के लिए बहुत-बहुत धन्यवाद: The-mystery-of-androids-full-स्क्रीन-डायलॉग-टुकड़े


6
वास्तव में यह काम करता है, लेकिन मैंने वीडियोव्यू के साथ प्रयास किया और यह उसके लिए काम नहीं करता है। स्टेटसबार अभी भी दिखाता है। इसलिए इसने मुझे कोड के नीचे नियत किया: डायलॉग ।getWindow ()। सेटफ्लैग्स (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
व्हाइटहॉर्स

1
अंत में हल करें, सुझाव के लिए धन्यवाद @ डेविड
आशु कुमार

1
इसने मेरे लिए अच्छा काम किया। मैंने ViewGroup.LayoutParams.WRAP_CONTENTऊंचाई के लिए इस्तेमाल किया । धन्यवाद।
स्तब्ध

1
यह साफ और गैर-
हैकरी है

7
यह मेरे मामले के लिए काम नहीं कर रहा है .. यह सभी कोनों से कुछ पैडिंग दिखा रहा है। कोई मदद?
अब्दुल वहीद

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

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
एकमात्र समाधान जो मेरे लिए काम कर रहा था। अन्य कभी-कभी काम कर रहे थे, कभी-कभी नहीं। चलो आशा करते हैं कि मुझे इसका कोई अपवाद नहीं मिलेगा :)
azertiti

12
यह मेरे लिए भी काम करता है। यदि आप चाहते हैं कि पृष्ठभूमि पारदर्शी हो, तो आपको '' android.R.style.Theme_Translucent_NoTitleBar '' का उपयोग करना चाहिए
acntwww

2
कुंजी STYLE_NORMAL गुजर रही है। यह किसी अन्य गतिविधि की तरह ही स्क्रीन को भरने के लिए संवाद बनाता है। हम किसी भी विषय का उपयोग कर सकते हैं। सामग्री डिजाइन के लिए, आप एक सामग्री विषय (जैसे Theme.AppCompat.NoActionBar जो सिस्टम सजावट रखता है, लेकिन कार्रवाई बार हटाता है) प्राप्त कर सकते हैं।
rpattabi

2
हा-हा, जब मैंने लॉन्च किया, तो एक काली स्क्रीन दिखाई दी और मुझे लगा कि इसे फ्रीज कर दिया गया है। फिर मैंने एक थीम बदलकर Theme_Light_NoTitleBar_Fullscreen कर ली। धन्यवाद, एक संवाद पूरी स्क्रीन (एक स्थिति पट्टी सहित) पर कब्जा कर लेता है।
कूलमाइंड

1
सफेद पृष्ठभूमि के साथ Theme_DeviceDefault_Light_NoActionBar_Fullscreen fow डायलॉग।
हितेश साहू

45

इस लिंक के अनुसार DialogFragment fullscreen पक्षों पर पैडिंग दिखाता है यह एक आकर्षण की तरह काम करेगा।

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

4
शानदार काम करता है, 2018 में भी! (और कुछ नहीं किया) धन्यवाद।
ऑटोनॉमस

2
एंड्रॉइड स्टूडियो 3.1+ 2018 में भी यह बिल्कुल सही जवाब है, अन्य उत्तरों की तुलना में बेहतर यहां मौजूद हैं। अन्य उत्तर एंड्रॉइड यूआई को तोड़ देंगे जैसे कार्डव्यू, स्पिनर, आदि
तौफीक नूर रहमानंद

1
2020 में आकर्षक रूप से काम करता है!
यू यिन

काम करता है लेकिन अगर आप अपने XML लेआउट में मार्जिन को परिभाषित करना चाहते हैं, तो आपको अपने विचारों को दूसरे लेआउट के साथ लपेटना होगा, अन्यथा मार्जिन को नजरअंदाज कर दिया जाएगा।
फेलिप रिबेरो आर। मैगलस

30

केवल शैली का उपयोग करके एक पूर्ण स्क्रीन DialogFragment बनाएं

पहला उपाय

1. अपने में जोड़ें style.xml:

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

2. अपने संवाद में जोड़ें:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

दूसरा तरीका

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

AppThemeआप शैलियों में परिभाषित विषय कहां है।


यह ब्रैडली 4 के उत्तर की तुलना में अधिक सुरुचिपूर्ण तरीका है।
मेलाइन

संपूर्ण एक पंक्ति समाधान
me_

दोनों समाधानों ने काम किया, लेकिन पहले वाले क्लिपबोर्ड पॉपअप के साथ बग का कारण बना। वैकल्पिक काम ठीक है
Janusz Hain

18

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

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

इसके अलावा सामग्री के साथ सभी स्थान को भरने के लिए LinearLayout।

लेकिन संवाद के बाएँ और दाएँ किनारों और कुछ लॉलीपॉप + डिवाइस (जैसे नेक्सस 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
मैंने इस थ्रेड पर अधिकांश उत्तरों की कोशिश की, कुछ ने काम किया, लेकिन मैंने अपने सभी ऐप कॉम्पेटिटिव थीम स्टाइल खो दिए। मुझे उम्मीद है कि यह एक मूल विषय के रूप में काम करेगा AppCompat था। यह लगभग काम कर गया। मेरे लिए, मुझे 2 अतिरिक्त शैलियों को जोड़ना था: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> स्रोत: TechRepublic
ब्रेनो

15

फ़ुलस्क्रीन डायलॉग का उपयोग करने से पहले मैं इस मुद्दे से मिला था: फ़ुलस्क्रीन सेट करते समय हमेशा पैडिंग होती है। इस कोड को DialFragment के onActivityCreated () विधि में आज़माएं:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

यह काम करता है, अन्य समाधान बटन के विषय और टुकड़े के अन्य तत्वों को बदलता है।
योंद्री

11

जहां तक ​​एंड्रॉइड एपीआई अपडेट हुआ, पूर्ण स्क्रीन संवाद दिखाने के लिए सुझाई गई विधि निम्नलिखित है:

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

अन्यथा, यदि आप नहीं चाहते कि इसे फुलस्क्रीन दिखाया जाए तो आप इस तरह से कर सकते हैं:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

आशा करता हूँ की ये काम करेगा।

संपादित करें

इस बात से अवगत रहें कि मैंने जो समाधान दिया वह काम करता है लेकिन उसे एक कमजोरी मिली है जो कभी-कभी परेशान कर सकती है। android.R.id.contentकंटेनर में DialogFragment जोड़ना आपको DialogFragment#setCancelable()सुविधा को सही ढंग से संभालने की अनुमति नहीं देगा और DialogFragment को स्वयं बैक स्टैक में जोड़ने पर अप्रत्याशित व्यवहार हो सकता है।

तो मैंने आपको सरल तरीके से अपने डायलॉगफ्रैगमेंट की शैली को ऑनक्रिएट विधि में निम्नलिखित के रूप में बदलने का सुझाव दिया है:

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

आशा करता हूँ की ये काम करेगा।


1
मैं सहमत हूँ। यहाँ Android डेवलपर गाइड से पूरी व्याख्या है: लिंक
user2274431

10

सेटसेटाइल का उपयोग करने की कोशिश करें और ऑनक्रिएट में ओवरराइड करें। शीर्षक के बिना डायलॉग बनाएं

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

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);        
    return dialog;
}

या बस onCreate () को ओवरराइड करें और कोड को सेट करें।

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

8

यह वास्तव में इस बात पर निर्भर करता है कि लेआउट कैसे परिभाषित किया जाता है। लेकिन यह सुनिश्चित करने के लिए कि संवाद को आवश्यक आकार मिलता है, सबसे अच्छा समाधान यह है कि संवाद दिखाए जाने के बाद (और निर्माण के लिए नहीं) लेआउटप्रैम प्रदान करें। DialogFragment पर संवाद ऑनस्टार्ट विधि पर दिखाया जाता है , इसलिए पूरी चौड़ाई प्राप्त करने के लिए एक मान्य विधि है:

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

यह भी एक विषय है, या शैली प्रदान करने के लिए, एक NO_TITLE शैली की तरह, सबसे अच्छा स्थान पर है onCreate विधि:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

7

नोट: यहां तक ​​कि एक सही उत्तर यहां मिल सकता है। लेकिन मैं एक भ्रम स्पष्ट करना चाहता हूं।

के लिए नीचे दिए गए कोड का उपयोग करें 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);
}

6

और कोटलिन संस्करण!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
यह सचमुच काम करता है! इसके अलावा, मैं जोड़ना चाहता हूं, डेवलपर को सामग्री के विरूपण से बचने के लिए पारदर्शी फ़्रेमलैट द्वारा संवाद सामग्री लपेटनी चाहिए।
जॉर्जी चेब्बतारेव

4

यह इस समस्या का समाधान है कि मैंने इस मुद्दे को कैसे सुलझाया:

@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));
    }
}

3

अपने style.xml में नीचे विषय बनाएँ:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

फिर डायलॉगफ्रैगमेंट में स्टाइल सेट करें

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

2

चिराग नगरिया '_Fullscreen' को छोड़कर सही है। इसे किसी भी आधार शैली का उपयोग करके हल किया जा सकता है जो डायलॉग शैली से उत्पन्न नहीं है। 'android.R.style.Theme_Black_NoTitleBar' का भी उपयोग किया जा सकता है।


1

यदि कोई अन्य व्यक्ति इस पार आता है, तो मुझे इसके समान अनुभव था, लेकिन यह पता चला कि मुद्दा यह था कि मैं onCreateView से फुलाए गए दृश्य को वापस करना भूल गया था (इसके बजाय डिफ़ॉल्ट super.onCreateView को वापस करना)। मैंने बस सही फुलाया दृश्य लौटाया और इससे समस्या हल हो गई।


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

यह समाधान डायलॉग पर एक पूर्ण स्क्रीन थीम लागू करता है, जो कि ऑनक्रिएट में चिराग के सेट्टीलेट के समान है। एक नुकसान यह है कि saveInstanceState का उपयोग नहीं किया जाता है।


1

एकाधिक उपयोगों के लिए सामान्य खंड संवाद के लिए इसे आज़माएं। आशा है कि यह आपकी मदद करेगा

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @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);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}

कृपया इस प्रश्न का उल्लेख करें - stackoverflow.com/questions/45494644/…
अमन वर्मा

1

यह वही है जो आपको टुकड़े करने के लिए सेट करने की आवश्यकता है:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

आपके मामले में:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

और क्यों? क्योंकि DialogFragment (जब स्पष्ट रूप से नहीं बताया गया है), अपनी आंतरिक शैलियों का उपयोग करेगा जो इसमें आपके कस्टम लेआउट को लपेटेंगे (कोई पूर्णस्क्रीन, आदि नहीं)।

और लेआउट? कोई हैक करने की जरूरत रास्ता, यह ठीक काम कर रहा है:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    ...
</RelativeLayout>

का आनंद लें


1

मुझे इस प्रश्न का उत्तर देने में बहुत देर हो गई है फिर भी मैं इस उत्तर को साझा करना चाहता हूं ताकि भविष्य में कोई भी इसका उपयोग कर सके।

मैंने अपनी परियोजना में इस कोड का उपयोग किया है यह निम्न संस्करण के साथ-साथ उच्च संस्करण में भी काम करता है।

बस इस विषय का उपयोग onCreateDialog () में इस तरह करें:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fullscreen - यहां इस विषय का स्रोत कोड है जिसे आप केवल देख सकते हैं कि यह विषय पूर्ण स्क्रीन में DialogFragment बनाने के लिए पर्याप्त है।

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

अगर कोई किसी भी मुद्दे का सामना करता है तो कृपया मुझे बताएं। आशा है कि यह उपयोगी है। धन्यवाद :)


डायलॉग फुलस्क्रीन पर आता है लेकिन एक बटन को छोड़कर सब कुछ काला हो गया। कोई उपाय ??
सागर नायक

1

यदि आप किसी रिश्तेदार लेआउट पर काम कर रहे हैं तो भी निम्नलिखित तरीका काम करेगा। निम्नलिखित चरणों का पालन करें:

  1. थीम संपादक पर जाएं (टूल के अंतर्गत उपलब्ध-> Android -> थीम संपादक)
  2. सभी थीम दिखाएँ का चयन करें। AppCompat.Dialog के साथ एक का चयन करें
  3. यदि आप चाहते हैं कि किसी भी विशिष्ट रंग की पृष्ठभूमि या पारदर्शी एक हो, तो विकल्प विंडो विंडो पृष्ठभूमि चुनें।
  4. रंग चुनें और OK को हिट करें। नए विषय का नाम चुनें।
  5. Style.xml पर जाएं और फिर विषय के तहत बस जोड़ा गया, इन दो विशेषताओं को जोड़ें:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

संवाद के लिए मेरी थीम सेटिंग निम्नानुसार है:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

सुनिश्चित करें कि थीम में एक पैरेंट है। Theme.AppCompat.Dialog एक और तरीका है कि स्टाइल.एक्सएमएल में एक नई शैली बनाएं और ऊपर दिए गए कोड के अनुसार इसे बदल दें।

  1. अपने डायलॉग फ्रैगमेंट क्लास और ऑनक्रिएट () विधि पर जाएं, अपने डायलॉग की शैली को इस प्रकार सेट करें:

    @ ओवरराइड सार्वजनिक शून्य onCreate (@Nullable बंडल saveInstanceState) {super.onCreate (saveInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }


1

पूर्ण स्क्रीन संवाद की शैली में इसे नीचे की पंक्तियों में जोड़ें।

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

या: ओवरराइड फन ऑनक्रिएट (saveInstanceState: बंडल?) {super.onCreate (saveInstanceState) setStyle (DialogFragment.STYLE_NORMAL, R.style .BottomSheetDialogThemeNoFloating) <स्टाइल का नाम = "DownCogDiale"। आइटम का नाम = "android: windowIsFloating"> false </ item> </ style>
Filipkowicz

0

window.setLayout पुराने उपकरणों के लिए पर्याप्त नहीं है।

ये है जो मैं करता हूं:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

नए ConstraintLayoutका उपयोग करके एक समाधान के साथ लपेटा जाता ConstraintLayoutहै एक LinearLayoutminHeight और minWidth तय के साथ। रैपिंग के बिना, कॉन्ट्राटाइनलआउट को डायलॉग के लिए सही आकार नहीं मिल रहा है।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

कोटलिन में मेरे लिए काम किया,

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

निम्नलिखित समाधान ने मेरे लिए काम किया अन्य समाधान ने मुझे पक्षों में कुछ जगह दी अर्थात पूर्ण स्क्रीन नहीं

आपको onStart और onCreate मेथड में बदलाव करने की जरूरत है

@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);
    }
}


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


   
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.