अपनी सेटिंग कस्टमाइज़ करें Android Jetpack का हिस्सा है.

इस दस्तावेज़ में बताया गया है कि आपके क्रम में Preference ऑब्जेक्ट हैं.

प्राथमिकताएं ढूंढें

किसी एक Preference को ऐक्सेस करने के लिए, जैसे कि किसी उपयोगकर्ता के लिए, Preference वैल्यू, इस्तेमाल करें PreferenceFragmentCompat.findPreference(). यह तरीका दी गई कुंजी के साथ Preference के लिए पूरे क्रम में खोज करता है.

उदाहरण के लिए, EditTextPreference "signature" की कुंजी का इस्तेमाल करके, ये काम करें:

<EditTextPreference
        app:key="signature"
        app:title="Your signature"/>

नीचे दिए गए कोड का इस्तेमाल करके, इस Preference को वापस पाएं:

Kotlin

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
    setPreferencesFromResource(R.xml.preferences, rootKey)
    val signaturePreference: EditTextPreference? = findPreference("signature")
    // Do something with this preference.
}

Java

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.preferences, rootKey);
    EditTextPreference signaturePreference = findPreference("signature");
    // Do something with this preference.
}

कंट्रोल की सेटिंग किसको दिखे, इसे कंट्रोल करें

आपके पास यह कंट्रोल करने का विकल्प है कि उपयोगकर्ता को कौनसे Preference ऑब्जेक्ट दिखें सेटिंग स्क्रीन पर जाएं. उदाहरण के लिए, अगर कोई खास Preference अर्थपूर्ण केवल तभी जबकि कोई संबंधित सुविधा सक्षम हो, तो हो सकता है आप सुविधा के बंद होने पर Preference.

कोई शर्त पूरी होने पर ही Preference दिखाने के लिए, पहले Preference को सेट करें एक्सएमएल में 'गलत' पर दृश्यता, जैसा कि इस उदाहरण में दिखाया गया है:

<EditTextPreference
        app:key="signature"
        app:title="Your signature"
        app:isPreferenceVisible="false"/>

onCreatePreferences() में, Preference तब दिखाएं, जब इससे जुड़ी शर्त पूरी हुई:

Kotlin

override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
    setPreferencesFromResource(R.xml.preferences, rootKey)
    if(/*some feature*/) {
        val signaturePreference: EditTextPreference? = findPreference("signature")
        signaturePreference?.isVisible = true
    }
}

Java

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
    setPreferencesFromResource(R.xml.preferences, rootKey);
    if(/*some feature*/) {
        EditTextPreference signaturePreference = findPreference("signature");
        if (signaturePreference != null) {
            signaturePreference.setVisible(true);
        }
    }
}

डाइनैमिक रूप से खास जानकारी अपडेट करना

अगर Preference में डेटा बना रहता है, तो मौजूदा वैल्यू खास जानकारी, ताकि उपयोगकर्ता Preference. उदाहरण के लिए, EditTextPreference में सेव किया गया टेक्स्ट दिखना चाहिए वैल्यू और ListPreference में चुनी गई सूची की एंट्री दिखनी चाहिए. आप शायद यह भी में Preference ऑब्जेक्ट हैं जिनके लिए अंदरूनी या ऐप्लिकेशन की बाहरी स्थिति—उदाहरण के लिए, किसी वर्शन को दिखाने वाला Preference जोड़ें. ऐसा करने के लिए SummaryProvider.

Simple SummaryProvider का इस्तेमाल करें

ListPreference और EditTextPreference सामान्य SummaryProvider लागू करने की प्रक्रिया शामिल करें जो आपके पिछले Preference मान को सारांश के रूप में सहेजा गया. अगर कोई वैल्यू सेव नहीं की जाती है, तो उन पर "नहीं" का निशान दिखता है सेट."

एक्सएमएल से इन तरीकों को लागू करने के लिए, app:useSimpleSummaryProvider="true".

वैकल्पिक रूप से, कोड में आप ListPreference.SimpleSummaryProvider.getInstance() और EditTextPreference.SimpleSummaryProvider.getInstance() सामान्य SummaryProvider इंस्टेंस पाने के लिए और फिर उसे Preference, जैसा कि इस उदाहरण में दिखाया गया है:

Kotlin

listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()

Java

listPreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
editTextPreference.setSummaryProvider(EditTextPreference.SimpleSummaryProvider.getInstance());

कस्टम SummaryProvider का इस्तेमाल करें

आप अपने हिसाब से SummaryProvider बना सकते हैं और बदलावों को बदल सकते हैं provideSummary() ताकि Preference जब भी जवाब का अनुरोध करे, तब उसे कस्टमाइज़ किया जा सके. इसके लिए उदाहरण के लिए, नीचे दिया गया EditTextPreference, सेव किए गए आइटम की अवधि दिखाता है सारांश के रूप में मान:

EditTextPreference का उदाहरण दिखाने वाली इमेज
पहली इमेज. EditTextPreference का उदाहरण.

उदाहरण के लिए, यहां दी गई EditTextPreference मान लें:

<EditTextPreference
        app:key="counting"
        app:title="Counting preference"/>

onCreatePreferences() में, एक नया SummaryProvider बनाया और बदला जा सकता है खास जानकारी को दिखाने के लिए provideSummary():

Kotlin

val countingPreference: EditTextPreference? = findPreference("counting")

countingPreference?.summaryProvider = SummaryProvider<EditTextPreference> { preference ->
    val text = preference.text
    if (text.isNullOrEmpty()) {
        "Not set"
    } else {
        "Length of saved value: " + text.length
    }
}

Java

EditTextPreference countingPreference = findPreference("counting");

if (countingPreference != null) {
    countingPreference.setSummaryProvider(new SummaryProvider<EditTextPreference>() {
        @Override
        public CharSequence provideSummary(EditTextPreference preference) {
            String text = preference.getText();
            if (TextUtils.isEmpty(text) || text == null){
                return "Not set";
            }
            return "Length of saved value: " + text.length();
        }
    });
}

Preference की खास जानकारी में, सेव की गई वैल्यू या "सेट नहीं है" की लंबाई दिखती है जब कोई सहेजा गया मान मौजूद नहीं होता है.

EditTextPreference डायलॉग को पसंद के मुताबिक बनाएं

EditTextPreference डायलॉग बॉक्स में, टेक्स्ट फ़ील्ड के व्यवहार को इन विकल्पों के हिसाब से पसंद के मुताबिक बनाया जा सकता है एक OnBindEditTextListener. इस लिसनर को तब शुरू किया जाता है, जब उपयोगकर्ता को डायलॉग दिखाया जाता है.

उदाहरण के लिए, सिर्फ़ नंबर स्वीकार करने के लिए, डायलॉग बॉक्स को पसंद के मुताबिक बनाया जा सकता है. सबसे पहले, EditTextPreference:

<EditTextPreference
        app:key="number"
        app:title="Numbers only preference"/>

इसके बाद, onCreatePreferences() में, नया OnBindEditTextListener बनाएं और EditText को पसंद के मुताबिक बनाने के लिए, onBindEditText() को ओवरराइड करें, जब यह उपयोगकर्ता.

Kotlin

val numberPreference: EditTextPreference? = findPreference("number")

numberPreference?.setOnBindEditTextListener { editText ->
    editText.inputType = InputType.TYPE_CLASS_NUMBER
}

Java

EditTextPreference numberPreference = findPreference("number");

if (numberPreference != null) {
    numberPreference.setOnBindEditTextListener(
            new EditTextPreference.OnBindEditTextListener() {
                @Override
                public void onBindEditText(@NonNull EditText editText) {
                    editText.setInputType(InputType.TYPE_CLASS_NUMBER);
                }
            });
}

अब, जब उपयोगकर्ता को डायलॉग दिखाया जाता है, तो कीबोर्ड सिर्फ़ अंकों में खुलता है मोड की पहचान शामिल होती है, ताकि उपयोगकर्ता EditText में सिर्फ़ नंबर डाल सके.

प्राथमिकता के लिए कार्रवाइयां

Preference पर टैप करने पर, कोई खास कार्रवाई की जा सकती है. उदाहरण के लिए, Preference आपके ऐप्लिकेशन के किसी अलग हिस्से के लिंक के रूप में काम कर सकता है. कार्रवाई जोड़ने के लिए Preference से, सीधे Preference पर Intent सेट किया जा सकता है या सेट कर सकता है OnPreferenceClickListener ज़्यादा सटीक जानकारी देनी होगी.

इंटेंट सेट करें

नया Fragment लॉन्च करने के लिए, Preference पर Intent सेट किया जा सकता है, Activity या Preference पर टैप करने पर ऐप्लिकेशन अलग करें. यह है इस्तेमाल करने के समान है Context.startActivity() दिए गए Intent के साथ.

नेस्ट किए गए <intent> टैग का इस्तेमाल करके, एक्सएमएल में Intent को सेट किया जा सकता है. नीचे दिए गए उदाहरण में, Activity को लॉन्च करने वाले Intent के बारे में बताया गया है:

<Preference
        app:key="activity"
        app:title="Launch activity">
    <intent
            android:targetPackage="com.example"
            android:targetClass="com.example.ExampleActivity"/>
</Preference>

इसके अलावा, setIntent() का इस्तेमाल सीधे Preference पर किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

Kotlin

val intent = Intent(context, ExampleActivity::class.java)
activityPreference.setIntent(intent)

Java

Intent intent = new Intent(getContext(), ExampleActivity.class);
activityPreference.setIntent(intent);

एक्सएमएल का इस्तेमाल करके, Intent में अतिरिक्त चीज़ें भी शामिल की जा सकती हैं:

<Preference
        app:key="activity"
        app:title="Launch activity">
    <intent
            android:targetPackage="com.example"
            android:targetClass="com.example.ExampleActivity">
        <extra
                android:name="example_key"
                android:value="example_value"/>
    </intent>
</Preference>

यहां Intent वाले Preference का उदाहरण दिया गया है, जो किसी वेब पेज को लॉन्च करता है:

<Preference
        app:key="webpage"
        app:title="View webpage">
    <intent
            android:action="android.intent.action.VIEW"
            android:data="http://www.google.com" />
</Preference>

Kotlin

val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("http://www.google.com")

val webpagePreference = findPreference("webpage")
webpagePreference?.intent = intent

Java

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com"));
webpagePreference.setIntent(intent);

OnPreferenceClickListener

आप Preference पर OnPreferenceClickListener सेट कर सकते हैं, जो Preference पर टैप किए जाने पर, onPreferenceClick() पर कॉलबैक करें. उदाहरण के लिए, लिसनर का इस्तेमाल करके, किसी और Fragment या Activity पर जाएँ, अगर में नेविगेशन को मैनेज करने के लिए ज़्यादा जटिल लॉजिक हो सकता है.

OnPreferenceClickListener सेट करने के लिए, नीचे दिए गए तरीके से मिलते-जुलते कोड का इस्तेमाल करें:

Kotlin

onClickPreference.setOnPreferenceClickListener({
    // Do something.
    true
})

Java

onClickPreference.setOnPreferenceClickListener(preference -> {
    // Do something.
    return true;
});