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