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

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

পছন্দ খুঁজুন

একটি পৃথক Preference অ্যাক্সেস করতে, যেমন একটি Preference মান পাওয়া বা সেট করার সময়, PreferenceFragmentCompat.findPreference() ব্যবহার করুন। এই পদ্ধতিটি প্রদত্ত কী দিয়ে একটি Preference জন্য সমগ্র শ্রেণিবিন্যাস অনুসন্ধান করে।

উদাহরণস্বরূপ, "signature" এর একটি কী সহ একটি EditTextPreference অ্যাক্সেস করতে, নিম্নলিখিতগুলি করুন:

<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 প্রদর্শন করতে, প্রথমে XML-এ 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 ব্যবহার করে এটি করতে পারেন।

একটি SimpleSummaryProvider ব্যবহার করুন

ListPreference এবং EditTextPreference মধ্যে রয়েছে সাধারণ SummaryProvider বাস্তবায়ন যা স্বয়ংক্রিয়ভাবে সংরক্ষিত Preference মানকে সারাংশ হিসেবে প্রদর্শন করে। যদি কোন মান সংরক্ষিত না হয়, তারা "সেট নয়" প্রদর্শন করে।

XML থেকে এই বাস্তবায়ন সক্ষম করতে, 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 তৈরি করতে পারেন এবং যখনই Preference দ্বারা অনুরোধ করা হয় তখনই সারাংশ কাস্টমাইজ করতে provideSummary() ওভাররাইড করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত EditTextPreference তার সংরক্ষিত মানের দৈর্ঘ্য সারাংশ হিসাবে প্রদর্শন করে:

EditTextPreference উদাহরণ দেখানো একটি চিত্র
চিত্র 1. একটি উদাহরণ 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 সেট করতে পারেন৷

একটি অভিপ্রায় সেট করুন

যখনই Preference ট্যাপ করা হয় তখন আপনি একটি নতুন Fragment , Activity , বা পৃথক অ্যাপ চালু করতে একটি Preference উপর একটি Intent সেট করতে পারেন৷ এটি একটি প্রদত্ত 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() ব্যবহার করতে পারেন, নিম্নরূপ:

কোটলিন

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("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 সেট করতে পারেন, যা onPreferenceClick() এ একটি কলব্যাক যোগ করে যখন Preference ট্যাপ করা হয়। উদাহরণস্বরূপ, ন্যাভিগেশন পরিচালনা করার জন্য আপনার যদি আরও জটিল যুক্তি থাকে তবে আপনি শ্রোতাকে অন্য Fragment বা Activity নেভিগেট করতে ব্যবহার করতে পারেন।

একটি OnPreferenceClickListener সেট করতে, নিম্নলিখিতগুলির মতো কোড ব্যবহার করুন:

কোটলিন

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

জাভা

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