सेटिंग Android Jetpack का हिस्सा है.

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

अपने ऐप्लिकेशन में उपयोगकर्ता कॉन्फ़िगर की जा सकने वाली सेटिंग जोड़ने के लिए, AndroidX का इस्तेमाल करें प्राथमिकता लाइब्रेरी. यह लाइब्रेरी यूज़र इंटरफ़ेस को मैनेज करती है और ताकि आप सिर्फ़ उन अलग-अलग सेटिंग को तय कर सकें जिन्हें उपयोगकर्ता कॉन्फ़िगर करें. लाइब्रेरी एक मटीरियल डिज़ाइन थीम के साथ आती है, जो सभी डिवाइसों और ओएस वर्शन पर एक जैसा उपयोगकर्ता अनुभव दे सकें.

शुरू करें

Preference मूल बिल्डिंग है प्राथमिकता लाइब्रेरी का ब्लॉक. सेटिंग स्क्रीन में Preference है हैरारकी. आप इस पदानुक्रम को एक XML संसाधन के रूप में परिभाषित कर सकते है या आप बिल्ड कोड को अलग-अलग क्रम में दिखाना.

नीचे दिए सेक्शन में, AndroidX की प्राथमिकता वाली लाइब्रेरी.

शुरू करने से पहले, अपने build.gradle में प्राथमिकता लाइब्रेरी डिपेंडेंसी जोड़ें फ़ाइल:

ग्रूवी

dependencies {
    implementation "androidx.preference:preference-ktx:1.2.0"
}

Kotlin

dependencies {
    implementation("androidx.preference:preference-ktx:1.2.0")
}

Gradle सिंक होने के बाद, आपके पास टास्क के एक्सएमएल वाले हिस्से पर जाने का विकल्प होता है.

हैरारकी बनाना

अपने प्रोजेक्ट में, res/xml फ़ोल्डर में जाएं. इसके बाद, एक preferences.xml फ़ाइल बनाएं, और इसमें निम्न कोड जोड़ दें:

<PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <SwitchPreferenceCompat
        app:key="notifications"
        app:title="Enable message notifications"/>

    <Preference
        app:key="feedback"
        app:title="Send feedback"
        app:summary="Report technical issues or suggest new features"/>

</PreferenceScreen>

इस हैरारकी में दो Preference ऑब्जेक्ट हैं: a SwitchPreferenceCompat इससे उपयोगकर्ता, सेटिंग को टॉगल करके चालू और बंद कर सकते हैं. साथ ही, सामान्य Preference का इस्तेमाल कर सकते हैं विजेट.

हैरारकी बनाते समय, हर Preference के लिए एक खास कुंजी होनी चाहिए.

हैरारकी को इनफ़्लेट करें

एक्सएमएल एट्रिब्यूट से हैरारकी को बढ़ाने के लिए, PreferenceFragmentCompat बदलें onCreatePreferences(), और बढ़ाने के लिए एक्सएमएल रिसॉर्स दें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.preferences, rootKey)
    }
}

Java

public class MySettingsFragment extends PreferenceFragmentCompat {
    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        setPreferencesFromResource(R.xml.preferences, rootKey);
    }
}

इसके बाद, इस Fragment को अपने Activity में उसी तरह जोड़ें जैसा किसी और वेबसाइट के लिए किया जाता है Fragment:

Kotlin

class MySettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.settings_container, MySettingsFragment())
                .commit()
    }
}

Java

public class MySettingsActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.settings_container, new MySettingsFragment())
                .commit();
    }
}

नतीजा यहां दी गई इमेज में दिखाया गया है:

प्राथमिकता वाली स्क्रीन का उदाहरण दिखाने वाली इमेज
पहली इमेज. दो Preference का इस्तेमाल करके बनाई गई सेटिंग स्क्रीन ऑब्जेक्ट हैं.

प्राथमिकताओं को मॉनिटर करें

आपकी पसंद में बदलाव होने पर, आपको इवेंट में शामिल होने के लिए लिसनर रजिस्टर करना होगा यह:

Kotlin

findPreference<SwitchPreferenceCompat>("notifications")
    ?.setOnPreferenceChangeListener { _, newValue ->
        Log.d("Preferences", "Notifications enabled: $newValue")
        true // Return true if the event is handled.
    }

findPreference<Preference>("feedback")
    ?.setOnPreferenceClickListener {
        Log.d("Preferences", "Feedback was clicked")
        true // Return true if the click is handled.
    }

Java

SwitchPreferenceCompat notificationsPref = findPreference("notifications");

if (notificationsPref != null) {
    notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> {
        Log.d("Preferences", String.format("Notifications enabled: %s", newValue));
        return true; // Return true if the event is handled.
    });
}

Preference feedbackPref = findPreference("feedback");

if (feedbackPref != null) {
    feedbackPref.setOnPreferenceClickListener((preference) -> {
        Log.d("Preferences", "Feedback was clicked");
        return true; // Return true if the event is handled.
    });
}

वर्तमान प्राथमिकता मान पढ़ें

PreferenceFragmentCompat यह जानकारी सेव करने में इस्तेमाल होने वाली ज़्यादातर मशीनों को छिपा देता है प्राथमिकताएं पढ़ना. हालांकि, सब कुछ SharedPreferences, और आप इन वैल्यू को उसी तरह पढ़ सकते हैं जैसे आप आम तौर पर करते हैं SharedPreferences:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

preferences.forEach {
    Log.d("Preferences", "${it.key} -> ${it.value}")
}

Java

var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll();

preferences.forEach((key, value) ->{
    Log.d("Preferences", String.format("%s -> %s", key, value));
});

पिछले स्निपेट कोSharedPreferences ऐप्लिकेशन, सेव की गई सभी वैल्यू ऐक्सेस करता है, उन पर लूप करता है, और उन्हें लॉगकैट.