2013-08-30 9 views
23

मैं एक कस्टम डायलॉगफ्रैगमेंट बना रहा हूं जो एक्शनबार के नीचे प्रदर्शित होता है। अब तक सबकुछ बढ़िया काम करता है। संवाद खंड के लिए लेआउट पैरामीटर चौड़ाई के लिए match_parent और ऊंचाई के लिए wrap_content हैं।डायलॉगफ्रैगमेंट फुलस्क्रीन पक्षों पर पैडिंग दिखाता है

मैंने लेआउट पैरामीटर सेट करने और प्रदर्शन आकार प्राप्त करके और थीम को हटाकर प्रत्येक समाधान की कोशिश की है। हालांकि इससे कोई फर्क नहीं पड़ता कि अदृश्य होने वाले संवाद के बाएं, दाएं और ऊपर की ओर एक छोटी सी जगह है। मुझे यह जानने की जरूरत है कि इस जगह को कैसे हटाया जाए, इसलिए यह वास्तव में स्क्रीन की चौड़ाई से मेल खाता है और उम्मीद है कि शीर्ष पैडिंग से भी छुटकारा पाता है।

+0

संवाद की शैली/विषय बदलने की कोशिश करें –

+0

नीचे आज़माएं और मुझे यह बताएं कि यह काम करता है या नहीं। संवाद पूर्ण स्थान उपलब्ध कराता है। – Raghunandan

+0

हां मेरे पास, कुछ थीम हैं जो पैडिंग से छुटकारा पाती हैं लेकिन खंड के सभी अन्य पैरामीटर सेट को भी हटा देती हैं .. संवादफलक केवल पूर्णस्क्रीन के रूप में प्रदर्शित होता है (चौड़ाई और ऊंचाई पर match_parent और actionabr के लिए किसी भी एक्स ऑफ़सेट को हटा देता है)। जो कुछ मैं ढूंढ रहा हूं वह नहीं है। – ahmad

उत्तर

28

मैंने कस्टम संवाद थीम का उपयोग करके इसे समझ लिया। खिड़की इशारा करना पृष्ठभूमि से छुटकारा पा जाएगा लेकिन पृष्ठभूमि के नीचे पृष्ठभूमि के नीचे कुछ अतिरिक्त जगह जोड़ देगा। इस मामले में आप इसे मिटाने के लिए windowBackground @null का उपयोग कर सकते हैं।

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

रघुनाथन के लिए धन्यवाद जिन्होंने मुझे वह लिंक दिया जिसमें सभी स्टाइल गुण शामिल हैं। मुझे थोड़ी देर लग गई लेकिन मैं उस फाइल के माध्यम से गया और बहुत ही रोचक तत्व पाए। निश्चित रूप से थीम शैलियों का पता लगाने के लिए नीचे दिए गए लिंक पर एक नज़र डालें।

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

+0

कॉल के बाद मेरे लिए काम करता है 'नया संवाद (getActivity(), R.style.CustomDialog) ' – li2

10

https://groups.google.com/forum/#!topic/android-developers/NDFo9pF8sHY

डायने Hackborn सुझाव

उपयोग android.R.style.Theme या android.R.style.Theme_Light रूप में गैर-संवाद विषय से।

@ विषयों

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml देखो।

चेक इस लिंक

http://developer.android.com/reference/android/app/DialogFragment.html

DialogFragment picker = MyDialogFragment.newInstance(); 
picker.setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme); 
picker.show(getFragmentManager(), "MyDialogFragment"); 
+0

अंत में! मेरी समस्या मूल विषय थी: 'parent =" @ android: style/theme.Dialog "' किसी अन्य विषय में बदलकर मेरे संवाद को एक अच्छे पहलू और मार्जिन के साथ रखता है। –

9

आप अपने संवाद करने के लिए इस विषय के लिए सेट करता है, तो यह हमेशा

<!-- DIALOG STYLE --> 
<style name="You.Dialog" parent="android:Theme.Holo.Dialog" > 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">true</item> 
    <item name="android:windowIsFloating">false</item> 
</style> 

तो आप इस setStyle(int,int) विधि का उपयोग कर सकते हैं करने के लिए पूर्ण स्क्रीन हो जाएगा।

dialogFragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.You_Dialog); 
+0

मैं आपका समाधान आजमा रहा हूं। मैं इसे पूर्ण स्क्रीन नहीं चाहता हूं, अगर मैं इन विषयों में से किसी एक का उपयोग करता हूं तो मैं सिर्फ पैडिंग को हटाना चाहता हूं, मैंने इसे प्रोग्रामेटिक रूप से किसी पैरामीटर को असाइन करने पर सभी नियंत्रण खो दिया है। – ahmad

+0

ठीक है, तो खेद है कि मैं गलत प्रश्न समझ गया: \ –

5

मैंने पहले इस मुद्दे को मिले: वहाँ हमेशा एक गद्दी पूर्ण-स्क्रीन सेट होने है। dialogFragment के onActivityCreated में इस कोड की कोशिश() विधि:

public void onActivityCreated(Bundle 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); 
    } 
} 
3

सबसे पहले आप संवाद टुकड़ा में पूर्ण स्क्रीन की है कि हैंडलिंग पता करने की जरूरत सामान्य संवाद घटक से अलग है, दूसरा आप वास्तविक निर्माण से पहले संवाद टुकड़ा अनुकूलित करने के लिए की जरूरत है संवाद @ (OnCreateDialog), "user3244180" Full screen DialogFragment

@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; 
} 
+0

ए' फ्रेमलेआउट 'भी काम करेगा, और यह हल्का व्यू ग्रुप है। साथ ही - जब मैंने 'dialog.requestWindowFeature (Window.FEATURE_NO_TITLE) छोड़ा तो मैंने कोई फर्क नहीं देखा। – AutonomousApps

6

का जवाब यह < एपीआई 11 के लिए समर्थन के साथ मेरे लिए काम किया के अनुसार की।

एक शैली दोनों पूर्ण स्क्रीन है और एक पारदर्शी पृष्ठभूमि है कि बनाएँ:

<style name="TransparentDialog" parent="@android:style/Theme"> 
<item name="android:windowBackground">@android:color/transparent</item> 
<item name="android:background">@android:color/transparent</item> 
</style> 

फिर अपने DialogFragment कोड:

public class MyDialog extends DialogFragment { 

    public static MyDialog newInstance() { 
     MyDialog dialog = new MyDialog(); 
     dialog.setStyle(DialogFragment.STYLE_NO_FRAME, R.style.TransparentDialog); 
     return dialog; 
    } 

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

अंत में, बस स्पष्टता के लिए, my_custom_layout.xml की सामग्री:

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

.......................... 
..Whatever You Want Here.. 
.......................... 

</RelativeLayout> 
1

डायलॉगफ्रेगमेंट (स्पष्ट रूप से नहीं बताया गया), इसकी आंतरिक शैलियों का उपयोग करेगा जो इसमें आपके कस्टम लेआउट को लपेटेगा (कोई फुलस्क्रीन नहीं, आदि)।

इस समस्या के लिए कस्टम थीम बनाने की कोई आवश्यकता नहीं है।

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

मैं Nexus 6P और पिक्सेल के लिए DialogFragment में भारी पक्ष गद्दी हो रही थी: बस इस विधि और सेट शैली और विषय अपने चयन के लिए उपयोग करें।

फिक्स्ड कि इस प्रकार कस्टम शैली को परिभाषित करते हुए:

<style name="Custom.Dialog" parent="android:Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" > 
     <item name="android:windowBackground">@null</item> 
     <item name="android:windowIsFloating">true</item> 
</style> 

माता पिता = "एंड्रॉयड: Theme.DeviceDefault.Dialog.NoActionBar.MinWidth चाल

0

फुलस्क्रीन संवाद के लिए किया था मैं एक पोस्ट किया है जवाब देने के

In this thread

कृपया जांच करें यह सबसे एफई है कुशल और सबसे छोटा रास्ता। उम्मीद है कि यह मदद करता है :)

संबंधित मुद्दे