সেটিংস   Android Jetpack-এর অংশ।

সেটিংস ব্যবহারকারীদের কোনও অ্যাপের কার্যকারিতা এবং আচরণ পরিবর্তন করতে দেয়। সেটিংস ব্যাকগ্রাউন্ডের আচরণকে প্রভাবিত করতে পারে, যেমন অ্যাপটি কত ঘন ঘন ক্লাউডের সাথে ডেটা সিঙ্ক করে অথবা সেগুলি আরও বেশি প্রভাব ফেলতে পারে, যেমন কন্টেন্ট এবং ইউজার ইন্টারফেসের প্রেজেন্টেশন পরিবর্তন করা।

আপনার অ্যাপে ব্যবহারকারীর কনফিগার করা সেটিংস ইন্টিগ্রেট করতে, AndroidX প্রেফারেন্স লাইব্রেরি ব্যবহার করুন। এই লাইব্রেরি ইউজার ইন্টারফেস ম্যানেজ করে এবং স্টোরেজের সাথে ইন্টার‍্যাক্ট করে যাতে আপনি শুধুমাত্র সেইসব স্বতন্ত্র সেটিংস নির্ধারণ করেন যা ব্যবহারকারী কনফিগার করতে পারবেন। লাইব্রেরিতে একটি মেটেরিয়াল ডিজাইন থিম আছে যা বিভিন্ন ডিভাইস ও OS ভার্সন জুড়ে একই ধরনের ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

শুরু করুন

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 সিঙ্ক করার পরে, আপনি টাস্কের XML অংশে যেতে পারবেন।

হায়ারার্কি তৈরি করুন

আপনার প্রোজেক্টে, 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 অবজেক্ট আছে: একটি SwitchPreferenceCompat যা ব্যবহারকারীদের কোনও সেটিং চালু ও বন্ধ করার সুবিধা দেয় এবং একটি বেসিক Preference যাতে কোনও উইজেট নেই।

হায়ারার্কি তৈরি করার সময়, প্রতিটি Preference-এর একটি অনন্য 'কী' থাকতে হবে।

হায়ারার্কি বড় করুন

XML অ্যাট্রিবিউট থেকে একটি হায়ারার্কি ইনফ্লেট করতে, একটি PreferenceFragmentCompat তৈরি করুন, ওভাররাইড করুন onCreatePreferences(), এবং ইনফ্লেট করার জন্য XML রিসোর্স প্রদান করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

Kotlin

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

জাভা

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

জাভা

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

জাভা

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

জাভা

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

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

আগের স্নিপেট অ্যাপের জন্য ডিফল্ট SharedPreferences-এর একটি ইনস্ট্যান্স পায়, সেভ করা সব ভ্যালু অ্যাক্সেস করে, সেগুলির উপর লুপ করে এবং Logcat-এ প্রিন্ট করে।