DialogFragment का शीर्षक कैसे सेट करें?


163

यह एक सरल कार्य होना चाहिए, लेकिन किसी कारण से मैं डायलॉगफ्रैगमेंट का शीर्षक निर्धारित करने का एक तरीका ढूंढ सकता हूं । (मैं onCreateViewअधिभार का उपयोग करके संवाद सामग्री सेट कर रहा हूं )।

डिफ़ॉल्ट शैली शीर्षक के लिए एक जगह छोड़ देती है, लेकिन मैं DialogFragmentइसे सेट करने के लिए कक्षा पर कोई विधि नहीं ढूँढ सकता।

शीर्षक किसी तरह जादुई onCreateDialogतरीके से सेट किया जाता है जब सामग्री को सेट करने के लिए विधि का उपयोग किया जाता है, इसलिए मुझे आश्चर्य है कि क्या यह डिजाइन द्वारा है, या onCreateViewअधिभार का उपयोग करते समय इसे सेट करने के लिए एक विशेष चाल है ।

जवाबों:


312

आप उपयोग कर सकते हैं getDialog().setTitle("My Dialog Title")

सिर्फ इस तरह:

public static class MyDialogFragment extends DialogFragment {
    ...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Set title for this dialog
        getDialog().setTitle("My Dialog Title");

        View v = inflater.inflate(R.layout.mydialog, container, false);
        // ...
        return v;
    }
    // ...
}

6
हाँ, वास्तव में getDialog ()। SetTitle () चाल करता है। समाधान को देखने के बाद उस तरह से काम करने के लिए बहुत समझ में आता है, लेकिन किसी कारण से मुझे उम्मीद थी कि शीर्षक सेट करने के लिए डायलॉगफ्रैगमेंट वर्ग पर ही होगा (उसी स्थान पर जहां सेटसाइल () और डायलॉगफ्रेग्मेंट .STYLE_NO_TITLE परिभाषित हैं)। समाधान के लिए बहुत-बहुत धन्यवाद।
स्टीफन के

1
क्या होगा अगर मैं शीर्षक की पृष्ठभूमि को बदलना चाहता था। क्या यह संभव है?
मिंसमैन २२'१२

5
यह भी ध्यान दें कि आप संवाद शीर्षक को अंश पर सेट नहीं कर सकते हैं () विधि चूंकि संवाद अभी तक नहीं बनाया गया है :)
greg7gkb

2
@ रब होम्स मैं टाइटल को डायलॉग क्लास के बाहर (जहां मैं उदाहरण बनाता हूं) से सेट करना चाहता हूं। Ie MyDialogFragment myFragment = new MyDialogFragment (); myFragment.getDialog () setTitle ( "myTitle")।; myFragment.show (getFragmentManager (), "myTitle"); हालाँकि, ऐसा लगता है जैसे getDialog () इस बिंदु पर शून्य है। क्या यहां से शीर्षक सेट करने का एक और तरीका है (बिना अपना सेटलाइट मैथडो बनाने के)?
डेविड डोरिया

1
मेरा मानना ​​है कि जेसन का दृष्टिकोण सामान्य मामले में अधिक सही है।
मिशेल

74

काम onCreateDialogपर सीधे शीर्षक को ओवरराइड करना और सेट करना क्या है Dialog? ऐशे ही:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle("My Title");
    return dialog;
}

9
आपका समाधान बेहतर है क्योंकि टुकड़े का उपयोग न केवल संवादों में किया जा सकता है
ruX

यह समाधान xamarin.android के लिए भी उपयोगी है
शिट्टू जोसेफ ओल्गबेंगा

इसके अलावा मेरे हाल के उत्तर को देखें जो उपरोक्त कोड पर आधारित है: stackoverflow.com/a/41798042/1617737
प्रतिबंध-जियोइंजीनियरिंग

14

जेसन का जवाब मेरे लिए काम करता था, लेकिन अब इसे दिखाने के लिए शीर्षक प्राप्त करने के लिए निम्नलिखित जोड़ की आवश्यकता है।

सबसे पहले, अपने MyDialogFragment की onCreate()विधि में, जोड़ें:

setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialogFragmentStyle);

फिर, अपनी शैलियों में। Xml फ़ाइल जोड़ें:

<style name="MyDialogFragmentStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">false</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">false</item>
</style>

अलग-अलग चीजों की कोशिश करने के घंटों के बाद, यह एकमात्र ऐसा तरीका है जिसने मेरे लिए चाल चली है।

एनबी - आपको Theme.AppCompat.Light.Dialog.Alertअपनी थीम की शैली से मेल खाने के लिए इसे किसी और चीज़ में बदलने की आवश्यकता हो सकती है ।


से android:windowNoTitle falseस्विच करने के बाद सेटिंग करना आवश्यक नहीं था , और न ही पर्याप्त था क्योंकि इसके परिणामस्वरूप डुप्लिकेट शीर्षक थे (हालांकि मैंने यह सुनिश्चित किया कि इसे केवल एक बार सेट किया जा रहा था)। Android.Support.V7.App.AppCompatDialogFragmentAndroid.Support.V4.App.DialogFragment
समीस

2

DialogFragment को संवाद और गतिविधि के रूप में दर्शाया जा सकता है। नीचे दिए गए कोड का उपयोग करें जो दोनों के लिए ठीक से काम करेगा

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (getShowsDialog()) {
        getDialog().setTitle(marketName);
    } else {
        getActivity().setTitle(marketName);
    }
}

1

आप आधिकारिक डॉक्स पर एक नज़र डाल सकते हैं । जिस तरह से मैंने किया वह इस प्रकार है:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
            .setTitle("My Title");
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.my_layout, null);
    builder.setView(view);

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