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

Ayarlar, kullanıcıların bir uygulamanın işlevselliğini ve davranışını değiştirmesine olanak tanır. Ayarlar şunları yapabilir: uygulamanın verileri daha geniş kapsamlı olabilir; örneğin, içeriği değiştirmek, çok önemli bir parçasıdır.

Kullanıcı tarafından yapılandırılabilen ayarları uygulamanıza entegre etmek için AndroidX'i kullanın Tercih kitaplığı. Bu kitaplık, kullanıcı arayüzünü yönetir ve Böylece kullanıcının erişebileceği ayarları yalnızca özel yapılandıramazsınız. Kitaplıkta sunulan Materyal Tasarım temasıyla, cihazlar ve işletim sistemi sürümleri arasında tutarlı bir kullanıcı deneyimi sağlar.

Başlayın

Preference, binanın en temel yapısıdır. bloğunu seçin. Ayarlar ekranında Preference hiyerarşi. Bu hiyerarşiyi bir XML kaynağı olarak tanımlayabilir veya bilgi edinin.

Aşağıdaki bölümlerde, AndroidX Tercih kitaplığı.

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

Eski

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 şu 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 nesne içerir: bir SwitchPreferenceCompat Kullanıcıların bir ayarı açıp kapatmalarına olanak tanıyan vePreference widget'ını tıklayın.

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

Hiyerarşiyi şişirme

Bir hiyerarşiyi XML özelliğinden şişirmek için bir PreferenceFragmentCompat geçersiz kılma onCreatePreferences(), 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 herhangi bir öğede yaptığınız gibi Activity cihazınıza ekleyebilirsiniz Fragment:

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 kullanılarak oluşturulan ayar ekranı nesneler'i tıklayın.

Tercihleri izleyin

Bir tercih değiştiğinde bir etkinliği almak için bir işleyiciyi şunları sağlar:

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, tasarrufla ilgili makinelerin çoğunu gizler ve okumayı öğreteceğim. Ancak her şey SharedPreferences ve bu değerleri normalde olduğu gibi okuyabilirsiniz SharedPreferences:

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, izleme etiketi için varsayılan SharedPreferences uygulama, depolanan tüm değerlere erişir, bunların üzerinde döngüler gerçekleştirir ve bunları Logcat.