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.