2013-03-14 4 views
12

मैं गोल कोनों के साथ एक कस्टम खंड संवाद बना रहा हूं और लेआउट के साथ जो स्क्रीन चौड़ाई को भर नहीं पाएगा (अगर मैं इसकी सामग्री को लपेटता हूं तो मैं पसंद करूंगा)।राउंड कोनों के साथ कस्टम फ्रैगमेंट डियालॉग और 100% स्क्रीन चौड़ाई नहीं

यह मेरे rounded_dialog.xml ड्रायबल फ़ोल्डर में है, जिसे संवाद के लिए पृष्ठभूमि के रूप में मेरे कस्टम ThemeWithCorners द्वारा बुलाया जाता है। मैंने इसे रैखिक लेआउट में पृष्ठभूमि के रूप में सेट करने का भी प्रयास किया जो इसकी सामग्री बनाता है लेकिन कुछ भी काम नहीं करता है।

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" 
> 
<solid android:color="@android:color/white"/> 
<corners android:radius="20dp" 
/> 
</shape> 

और इस मैं कैसे संवाद कहते हैं:

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

यह onCreateView विधि है::

final String FTAG = "TAG_FRAGMENT_DIALOG_CALENDAR"; 
    dialog = (CalendarDialog) fm.findFragmentByTag(FTAG); 
    ft = fm.beginTransaction(); 
    if (dialog != null) 
    { 
     ft.remove(dialog); 
    } 
    dialog = CalendarDialog.newInstance(this);  
    dialog.setCancelable(true); 

    ft.add(dialog, FTAG); 
    ft.show(dialog); 
    ft.commit(); 

संवाद मैं शैली और विषय सेट की onCreate विधि में

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
getDialog().setCanceledOnTouchOutside(true); 
v = (MyCalendar)inflater.inflate(R.layout.calendar_dialog, container, true) 
    return v; 
} 

मैंने भी कोशिश की अन्य उत्तर के रूप में onCreateDialog विधि को यह जोड़ सकते हैं ताकि सुझाव पर लेकिन या तो काम नहीं किया:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    Dialog d = super.onCreateDialog(savedInstanceState); 
    LayoutParams lp=d.getWindow().getAttributes(); 
    d.getWindow().setBackgroundDrawable(new ColorDrawable(0)); 
    lp.width=-2;lp.height=-2;lp.gravity=Gravity.CENTER; 
    lp.dimAmount=0;    
    lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; 

    return d; 
} 

तो यह योग करने के लिए, मैं दौर कोनों चाहते हैं, स्क्रीन के नहीं 100% चौड़ाई, यह अधिमानतः अपनी सामग्री लपेट चाहिए। कृपया, कृपया, मुझे कुछ मदद चाहिए, मैं इसके बारे में वास्तव में हताश हूं, मैं इसे दिनों के लिए कोशिश कर रहा हूं!

उत्तर

26

ठीक है, मुझे अभी एक समाधान मिला है, हालांकि मैं इसके साथ वास्तव में खुश नहीं हूं।

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<solid android:color="@android:color/transparent"/> 
<corners android:radius="10dp" /> 
<padding android:left="10dp" android:right="10dp"/> 
</shape> 

तो मैं यह मेरा संवाद करने के लिए अपने'onCreateView' विधि में इस तरह से कम सेट:

मैं इस तरह संवाद के लिए पृष्ठभूमि (rounded_dialog.xml) की स्थापना की। गोलाकार कोनों को कोड के इस टुकड़े में वास्तव में जरूरी नहीं है क्योंकि पृष्ठभूमि पारदर्शी है, लेकिन पैडिंग महत्वपूर्ण है, क्योंकि संवाद अभी भी स्क्रीन के रूप में व्यापक है, लेकिन पैडिंग ऐसा लगता है कि ऐसा नहीं है।

getDialog().getWindow().setBackgroundDrawableResource(R.drawable.rounded_dialog); 

और अंत में मैं जो कोनों दौर बनाता है एक और कस्टम drawable को dialog's घटकों की पृष्ठभूमि निर्धारित किया है। मेरे पास शीर्ष पर रिलेवेटिवआउट के साथ एक लीनियरलाउट है और नीचे टेक्स्टव्यू है, इसलिए मैंने पैरेंट लीनरआउट पर @null सेट किया है और दो हिस्सों में दो अलग-अलग कस्टम ड्रॉबल्स सेट किए हैं, जिनमें से एक नीचे कॉर्नर्स और दूसरे एक टॉप कॉर्नर हैं।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:orientation="vertical" 
android:background="@drawable/title_round" 
> 

<RelativeLayout 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:orientation="horizontal" 
    android:background="@drawable/blue_title_round_top" 
    android:paddingTop="4dp" 
    android:paddingBottom="4dp" 
    > 
<TextView 
    android:id="@+id/calendarHint" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/rounded_bottom" 
    android:layout_gravity="center" 
    android:gravity="center" 
     /> 
</LinearLayout> 

मेरा मानना ​​है कि वहाँ इस के लिए एक अधिक उचित समाधान है के रूप में यह सिर्फ नेत्रहीन सही है, वास्तव में नहीं कार्यात्मक है, लेकिन पर्याप्त इस मामले के लिए सही।

+0

भयानक दोस्त। धन्यवाद –

11

संवाद पृष्ठभूमि:dialog_rounded_bg.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="@android:color/white" /> 
    <corners android:radius="12dp" /> 
</shape> 

संवाद लेआउट:dialog_rounded.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/dialog_rounded_bg" 
    android:minWidth="260dp" 
    android:orientation="vertical" 
    android:padding="24dp"> 
    ... 
</LinearLayout> 

संवाद टुकड़ा:RoundedDialog.java

public class RoundedDialog extends DialogFragment { 
    ... 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.dialog_rounded, container, false); 
     // Set transparent background and no title 
     if (getDialog() != null && getDialog().getWindow() != null) { 
      getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     } 
     return view; 
    } 
    ... 
} 

Rounded dialog

अद्यतन: आप झंडा Window.FEATURE_NO_TITLE निर्धारित नहीं करते हैं, एंड्रॉयड ≤ 4.4 के साथ उपकरणों में संवाद के शीर्ष पर एक blue line appears

+2

मेरा मानना ​​है कि यह बेहतर समाधान है। साझा करने के लिए धन्यवाद! – Sam

+0

आपने संवाद में किस फ़ॉन्ट का उपयोग किया है? –

+0

यह एक कस्टम फ़ॉन्ट (मैसन नियू) है। –

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