Ayarlarınızı düzenleyin Android Jetpack'in bir parçasıdır.
Büyük ve karmaşık ayar ekranları kullanıcının değiştirmek istediği belirli bir ayarı bulmasını zorlaştırabilir. Tercih kitaplığı, ayar ekranlarınızı daha iyi düzenlemeniz için aşağıdaki yolları sunar.
Tercih kategorileri
Tek bir ekranda birkaç ilgili Preference
nesneniz varsa bunları bir PreferenceCategory
kullanarak gruplandırabilirsiniz. PreferenceCategory
, bir kategori başlığı görüntüler ve kategoriyi görsel olarak ayırır.
XML'de bir PreferenceCategory
tanımlamak için Preference
etiketlerini aşağıdaki gibi bir PreferenceCategory
ile sarmalayın:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:key="notifications_category" app:title="Notifications"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> </PreferenceCategory> <PreferenceCategory app:key="help_category" app:title="Help"> <Preference app:key="feedback" app:summary="Report technical issues or suggest new features" app:title="Send feedback"/> </PreferenceCategory> </PreferenceScreen>
Sonuç aşağıdaki gibi görünür:
![Kategorilerin yer aldığı tercihleri gösteren resim](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-preferencecategory.png?authuser=6&hl=tr)
Hiyerarşinizi birden fazla ekrana bölme
Çok sayıda Preference
nesneniz veya farklı kategoriniz varsa bunları ayrı ekranlarda görüntüleyebilirsiniz. Her ekran, kendi ayrı hiyerarşisine sahip bir PreferenceFragmentCompat
öğesidir. Ardından, ilk ekranınızdaki Preference
nesneleri ilgili tercihleri içeren alt ekranlara bağlanabilir.
Şekil 2'de, iki kategori içeren basit bir hiyerarşi gösterilmektedir: Mesajlar ve Senkronizasyon.
![Hiyerarşileri olan bir tercih ekranını gösteren resim](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-simplehierarchy.png?authuser=6&hl=tr)
Şekil 3'te, aynı tercih grubu birden çok ekrana bölünmüş olarak gösterilmektedir:
![Birden fazla ekrana bölünmüş bir hiyerarşiyi gösteren resim](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-screens.png?authuser=6&hl=tr)
Ekranları bir Preference
ile bağlamak için XML biçiminde bir app:fragment
beyan edebilir veya Preference.setFragment()
kullanabilirsiniz.
Preference
öğesine dokunulduğunda aşağıdaki örnekte gösterildiği gibi PreferenceFragmentCompat
öğesinin tam paket adını başlatın:
<Preference app:fragment="com.example.SyncFragment" .../>
Kullanıcı, ilişkilendirilmiş Fragment
öğesine sahip bir Preference
öğesine dokunduğunda arayüz yöntemi PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
çağrılır. Bu yöntemde, yeni ekranı görüntüleyebilirsiniz ve ekranın etrafındaki Activity
alanın içinde uygulanır.
Tipik bir uygulama süreci aşağıdaki gibidir:
Kotlin
class MyActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { // Instantiate the new Fragment. val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( classLoader, pref.fragment) fragment.arguments = args fragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment. supportFragmentManager.beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit() return true } }
Java
public class MyActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... @Override public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) { // Instantiate the new Fragment. final Bundle args = pref.getExtras(); final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate( getClassLoader(), pref.getFragment()); fragment.setArguments(args); fragment.setTargetFragment(caller, 0); // Replace the existing Fragment with the new Fragment. getSupportFragmentManager().beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit(); return true; } }
PreferenceScreens (Tercih Ekranları)
İç içe yerleştirilmiş bir <PreferenceScreen>
kullanarak aynı XML kaynağında iç içe yerleştirilmiş hiyerarşilerin bildirilmesi artık desteklenmiyor. Bunun yerine iç içe yerleştirilmiş Fragment
nesneleri kullanın.
Ayrı Etkinlikler kullanma
Alternatif olarak, her bir ekranı yoğun bir şekilde özelleştirmeniz gerekiyorsa veya ekranlar arasında tam Activity
geçişi yapmak istiyorsanız her PreferenceFragmentCompat
için ayrı bir Activity
kullanabilirsiniz. Bu şekilde her bir Activity
öğesini ve ilgili ayarlar ekranını tamamen özelleştirebilirsiniz. Çoğu uygulama için bunu yapmanız önerilmez. Bunun yerine, daha önce açıklandığı gibi Fragments
kullanın.
Preference
cihazından Activity
başlatma hakkında daha fazla bilgi için Tercih işlemleri bölümüne bakın.