Ayarlarınızı düzenleme Android Jetpack'in bir parçasıdır.
Büyük ve karmaşık ayar ekranları, kullanıcının istedikleri belirli bir ayar var. Tercih kitaplığında, daha iyi düzenlemek için aşağıdaki adımları uygulayabilirsiniz.
Tercih kategorileri
Birbiriyle ilgili birden fazla
Tek bir öğede Preference
nesne
kolayca bulabilirseniz, Sauce and Spoon'un
PreferenceCategory
. CEVAP
PreferenceCategory
, bir kategori başlığı görüntüler ve
seçin.
XML'de PreferenceCategory
tanımlamak için Preference
etiketlerini
PreferenceCategory
, şöyle:
<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ç şuna benzer:
Hiyerarşinizi birden çok ekrana bölme
Çok sayıda Preference
nesneniz veya farklı kategoriniz varsa
ayrı ekranlarda görüntüleyebilirsiniz. Her ekran bir
Kendi ayrı hiyerarşisinde PreferenceFragmentCompat
. Preference
nesne
ardından, alakalı reklam öğelerini içeren alt ekranlara
tercihler.
Şekil 2'de şu iki kategoriden oluşan basit bir hiyerarşi gösterilmektedir: Mesajlar ve Senkronizasyon.
Şekil 3'te, aynı tercihler birden çok ekrana bölünmüş olarak gösterilmiştir:
Ekranları Preference
ile bağlamak için XML olarak app:fragment
veya
dönüşüm hunisinin üst kısmındaki
Preference.setFragment()
.
Şu durumda PreferenceFragmentCompat
öğesinin tam paket adını başlat:
aşağıdaki örnekte gösterildiği gibi Preference
öğesine dokunulur:
<Preference app:fragment="com.example.SyncFragment" .../>
Kullanıcı, ilişkili bir Fragment
bulunan Preference
öğesine dokunduğunda arayüz
yöntem
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
çağrılır. Bu yöntem, yeni ekranı görüntüleyeceğiniz ve
ekran, etrafındaki Activity
çevresine uygulanmıştır.
Tipik bir uygulama aşağıdakine benzer:
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; } }
Tercih Ekranları
İç içe yerleştirilmiş bir XML kaynağı kullanarak iç içe yerleştirilmiş hiyerarşileri bildirme
<PreferenceScreen>
artık desteklenmiyor. İç içe yerleştirilmiş Fragment
nesnelerini kullanın
.
Ayrı Etkinlikler kullan
Alternatif olarak, her bir ekranı yoğun bir şekilde özelleştirmeniz gerekiyorsa veya
Ekranlar arasında Activity
geçişleri olduğundan her ekran için ayrı bir Activity
kullanabilirsiniz
her PreferenceFragmentCompat
. Bu şekilde her bir öğeyi
Activity
ve ilgili ayarlar ekranı. Çoğu uygulamada
bunu önerdi; bunun yerine, daha önce açıklandığı gibi Fragments
kullanın.
Preference
cihazından Activity
başlatma hakkında daha fazla bilgi için bkz.
Tercih işlemleri.