আপনার সেটিংস কাস্টমাইজ করুন   Android Jetpack-এর অংশ।

এই ডকুমেন্ট থেকে জানতে পারবেন যে আপনার হায়ারার্কিতে কীভাবে Preference অবজেক্ট কাস্টমাইজ করতে হয়।

পছন্দ খুঁজুন

কোনও স্বতন্ত্র Preference অ্যাক্সেস করতে, যেমন Preference ভ্যালু পাওয়া বা সেট করার সময়, PreferenceFragmentCompat.findPreference() ব্যবহার করুন। এই পদ্ধতিটি প্রদত্ত কী সহ Preference-এর জন্য সম্পূর্ণ হায়ারার্কি সার্চ করে।

যেমন, "signature"-এর কী দিয়ে EditTextPreference অ্যাক্সেস করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

<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.
}

জাভা

@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 দেখাতে, প্রথমে XML-এ 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
    }
}

জাভা

@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 ব্যবহার করে এটি করতে পারবেন।

SimpleSummaryProvider ব্যবহার করুন

ListPreference এবং EditTextPreference সহজ SummaryProvider প্রয়োগ অন্তর্ভুক্ত করে যা অটোমেটিক সেভ করা Preference ভ্যালু সারসংক্ষেপ হিসেবে দেখায়। কোনও ভ্যালু সেভ করা না থাকলে, "সেট করা নেই" দেখায়।

XML থেকে এইসব ইমপ্লিমেন্টেশন চালু করতে, app:useSimpleSummaryProvider="true" সেট করুন।

বিকল্প হিসেবে, কোডে আপনি ListPreference.SimpleSummaryProvider.getInstance() এবং EditTextPreference.SimpleSummaryProvider.getInstance() ব্যবহার করে সাধারণ SummaryProvider ইনস্ট্যান্স পেতে পারেন এবং তারপর এটি Preference-এ সেট করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

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 ধরে নিন:

<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
    }
}

জাভা

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
}

জাভা

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 সেট করতে পারেন।

উদ্দেশ্য সেট করুন

আপনি Preference-এ Intent সেট করতে পারেন যাতে Preference-এ ট্যাপ করা হলে নতুন Fragment, Activity বা আলাদা অ্যাপ চালু হয়। এটি প্রদত্ত Intent-এর সাথে Context.startActivity() ব্যবহার করার মতোই।

আপনি নেস্ট করা <intent> ট্যাগ ব্যবহার করে XML-এ Intent সেট করতে পারবেন। নিচের উদাহরণে এমন একটি Intent-এর সংজ্ঞা দেওয়া হয়েছে যা Activity লঞ্চ করে:

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

বিকল্প হিসেবে, আপনি সরাসরি Preference-এ setIntent() ব্যবহার করতে পারেন, যেমন:

Kotlin

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

জাভা

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

এছাড়াও, আপনি XML ব্যবহার করে 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

জাভা

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
})

জাভা

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