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:
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
}
}
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.