अपनी सेटिंग कस्टमाइज़ करें Android Jetpack का हिस्सा है.
इस दस्तावेज़ में बताया गया है कि
आपके क्रम में Preference
ऑब्जेक्ट हैं.
प्राथमिकताएं ढूंढें
किसी एक Preference
को ऐक्सेस करने के लिए, जैसे कि किसी उपयोगकर्ता के लिए,
Preference
वैल्यू, इस्तेमाल करें
PreferenceFragmentCompat.findPreference()
.
यह तरीका दी गई कुंजी के साथ Preference
के लिए पूरे क्रम में खोज करता है.
उदाहरण के लिए,
EditTextPreference
"signature"
की कुंजी का इस्तेमाल करके, ये काम करें:
<EditTextPreference
app:key="signature"
app:title="Your signature"/>
नीचे दिए गए कोड का इस्तेमाल करके, इस Preference
को वापस पाएं:
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
val signaturePreference: EditTextPreference? = findPreference("signature")
// Do something with this preference.
}
@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
तब दिखाएं, जब इससे जुड़ी
शर्त पूरी हुई:
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
if(/*some feature*/) {
val signaturePreference: EditTextPreference? = findPreference("signature")
signaturePreference?.isVisible = true
}
}
@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
, जैसा कि इस उदाहरण में दिखाया गया है:
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
listPreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance());
editTextPreference.setSummaryProvider(EditTextPreference.SimpleSummaryProvider.getInstance());
कस्टम SummaryProvider का इस्तेमाल करें
आप अपने हिसाब से SummaryProvider
बना सकते हैं और बदलावों को बदल सकते हैं
provideSummary()
ताकि Preference
जब भी जवाब का अनुरोध करे, तब उसे कस्टमाइज़ किया जा सके. इसके लिए
उदाहरण के लिए, नीचे दिया गया EditTextPreference
, सेव किए गए आइटम की अवधि दिखाता है
सारांश के रूप में मान:

EditTextPreference
का उदाहरण.
उदाहरण के लिए, यहां दी गई EditTextPreference
मान लें:
<EditTextPreference
app:key="counting"
app:title="Counting preference"/>
onCreatePreferences()
में, एक नया SummaryProvider
बनाया और बदला जा सकता है
खास जानकारी को दिखाने के लिए provideSummary()
:
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
}
}
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()
को ओवरराइड करें, जब यह
उपयोगकर्ता.
val numberPreference: EditTextPreference? = findPreference("number")
numberPreference?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
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
पर किया जा सकता है. इसके लिए, यह तरीका अपनाएं:
val intent = Intent(context, ExampleActivity::class.java)
activityPreference.setIntent(intent)
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>
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("http://www.google.com")
val webpagePreference = findPreference
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
सेट करने के लिए, नीचे दिए गए तरीके से मिलते-जुलते कोड का इस्तेमाल करें:
onClickPreference.setOnPreferenceClickListener({
// Do something.
true
})
onClickPreference.setOnPreferenceClickListener(preference -> {
// Do something.
return true;
});