Ayarlar Android Jetpack'in bir parçasıdır.

Ayarlar, kullanıcıların bir uygulamanın işlevini ve davranışını değiştirmesine olanak tanır. Ayarlar, uygulamanın verileri bulutla ne sıklıkta senkronize ettiği gibi arka plan davranışlarını veya kullanıcı arayüzünün içeriğini ve sunumunu değiştirmek gibi daha geniş kapsamlı olabilir.

Kullanıcı tarafından yapılandırılabilen ayarları uygulamanıza entegre etmek için AndroidX Tercih Kitaplığı'nı kullanın. Bu kitaplık, kullanıcı arayüzünü yönetir ve depolama alanıyla etkileşime geçer. Böylece yalnızca kullanıcının yapılandırabileceği bağımsız ayarları tanımlayabilirsiniz. Kitaplık, cihazlar ve işletim sistemi sürümleri genelinde tutarlı bir kullanıcı deneyimi sağlayan Materyal Tasarım temasına sahiptir.

Başlayın

Preference, Tercih Kitaplığı'nın temel yapı taşıdır. Ayarlar ekranı bir Preference hiyerarşisi içerir. Bu hiyerarşiyi XML kaynağı olarak tanımlayabilir veya kod içinde bir hiyerarşi oluşturabilirsiniz.

Aşağıdaki bölümlerde, AndroidX Tercih Kitaplığı kullanılarak basit bir ayarlar ekranının nasıl oluşturulacağı açıklanmaktadır.

Başlamadan önce, Tercih kitaplığı bağımlılığını build.gradle dosyanıza ekleyin:

Modern

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

Kotlin

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

Gradle Sync'ten sonra görevin XML bölümüne geçebilirsiniz.

Hiyerarşi oluşturma

Projenizde res/xml klasörüne gidin, bir preferences.xml dosyası oluşturun ve aşağıdaki kodu bu dosyaya ekleyin:

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

Bu hiyerarşide iki Preference nesnesi bulunur: kullanıcıların bir ayarı açıp kapatmalarına olanak tanıyan SwitchPreferenceCompat ve widget içermeyen temel Preference.

Bir hiyerarşi oluştururken her Preference benzersiz bir anahtara sahip olmalıdır.

Hiyerarşiyi şişirme

Aşağıdaki örnekte gösterildiği gibi, XML özelliğinden bir hiyerarşiyi şişirmek için bir PreferenceFragmentCompat oluşturun, geçersiz kılma onCreatePreferences() oluşturun ve şişirilecek XML kaynağını sağlayın:

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

Daha sonra bu Fragment öğesini, diğer tüm Fragment öğeleri gibi Activity öğelerinize ekleyebilirsiniz:

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

Sonuç aşağıdaki resimde gösterilmektedir:

Tercih ekranı örneğini gösteren resim
Şekil 1. İki Preference nesnesi kullanılarak oluşturulan bir ayar ekranı.

Tercihleri izleme

Bir tercih değiştiğinde etkinlik için işleyici kaydederek etkinlik alabilirsiniz:

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

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

Mevcut tercih değerini oku

PreferenceFragmentCompat, tercihleri kaydetme ve okuma için kullanılan makinelerin çoğunu gizler. Ancak her şey SharedPreferences kullanılarak depolanır ve bu değerleri normalde SharedPreferences ile olduğu gibi okuyabilirsiniz:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

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

Java

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

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

Önceki snippet, uygulama için varsayılan SharedPreferences öğesinin bir örneğini alır, depolanan tüm değerlere erişir, bunları döngüye alır ve Logcat'te yazdırır.