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ışını etkileyebilir 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ılabilir ayarları uygulamanıza entegre etmek için AndroidX Preference kitaplığını kullanın. Bu kitaplık, kullanıcı arayüzünü yönetir ve yalnızca kullanıcının yapılandırabileceği ayarları tanımlayabilmeniz için depolama alanıyla etkileşim kurar. Kitaplık, cihazlar ve OS sürümleri arasında tutarlı bir kullanıcı deneyimi sağlayan Materyal Tasarım temasıyla birlikte sunulur.

Başlayın

Preference, Tercih kitaplığının temel yapı taşıdır. Ayarlar ekranında Preference hiyerarşi bulunur. Bu hiyerarşiyi XML kaynağı olarak tanımlayabilir veya kodda hiyerarşi oluşturabilirsiniz.

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

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

Groovy

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

Kotlin

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

Gradle senkronizasyonundan 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 dosyaya aşağıdaki kodu 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şi iki Preference nesnesi içerir: kullanıcıların bir ayarı açıp kapatmasına olanak tanıyan SwitchPreferenceCompat ve widget içermeyen temel bir Preference.

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

Hiyerarşiyi şişirme

Bir XML özelliğinden hiyerarşi oluşturmak için bir PreferenceFragmentCompat oluşturun, onCreatePreferences() özelliğini geçersiz kılın ve aşağıdaki örnekte gösterildiği gibi ş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);
    }
}

Ardından bu Fragment öğesini, diğer Fragment öğelerinde yaptığınız gibi Activity cihazınıza 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, ilgili tercihe bir dinleyici 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

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

Geçerli tercih değerini oku

PreferenceFragmentCompat, tercihleri kaydetme ve okumayla ilgili mekanizmaların çoğunu gizler. Ancak her şey SharedPreferences kullanılarak depolanır ve bu değerleri normalde SharedPreferences ile yaptığınız gibi okuyabilirsiniz:

Kotlin

val preferences = PreferenceManager.getDefaultSharedPreferences(this).all

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

Java

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

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

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