Dengan PreferenceFragmentCompat baru dari v7 Preference Support Library: http://developer.android.com/tools/support-library/features.html#v7-preference , saya mendapatkan kesalahan ini
E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
Tema apa yang harus ditetapkan?
Pembaruan: Saya telah mencoba menggunakan
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
seperti yang disarankan oleh @Bogato tetapi tidak terlihat benar dan terlihat sangat Holo bahkan di Lollipop.
Pustaka dukungan:
Preferensi asli:
Jawaban:
Perbaikan bug tersedia sebagai dependensi gradle
Sekarang seseorang dapat menggunakan perpustakaan dengan cukup mudah. Berikut adalah cara tercepat untuk melakukannya, tetapi Anda harus membaca README untuk info lebih lanjut.
1. Perbarui file gradle modul Anda:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2. Gunakan kelas yang sesuai sebagai basis fragmen Anda
Anda dapat menggunakan salah satu
PreferenceFragmentCompat
atauPreferenceFragmentCompatDividers
.( Hati-hati dengan nama paket yang sesuai saat mengimpor
PreferenceFragmentCompat
! )3. Gunakan tema yang sesuai
Setel tema Activity
@style/PreferenceFixTheme
penampung Anda ke varian , seperti NoActionBar, Light, dll.PS Di bagian ini Anda dapat menemukan solusi rinci yang mengarah pada pembuatan perpustakaan, tetapi saya memutuskan untuk menghapusnya karena mungkin membingungkan. Jika Anda penasaran dengan langkah-langkahnya, Anda masih dapat menemukannya di riwayat revisi jawaban ini.
sumber
Anda harus menentukan Preferensi Tema dalam tema aktivitas preferensi Anda.
Sebagai contoh :
PreferenceThemeOverlay adalah tema default yang dilengkapi dengan pustaka dukungan Preference-v7.
sumber
Sepertinya Google memperbaiki masalah ini. Saya telah menguji ini dengan preferensi v14-support versi 25.3.1
1) Tambahkan
implementation 'com.android.support:preference-v14:25.3.1'
ke Gradle Anda.2) Tambahkan
PreferenceThemeOverlay.v14.Material
ke gaya, bukanPreferenceThemeOverlay
.3) Terakhir, tambahkan gaya ke Manifest
sumber
preferenceTheme
kePreferenceThemeOverlay.v14
dalamstyles.xml
dan kePreferenceThemeOverlay.v14.Material
dalamstyles-v21.xml
memperbaiki masalah.minSdkVersion
antara 14 dan 20.Untuk menggunakan PreferenceFragmentCompat, Anda harus menyetel
preferenceTheme
tema Anda:Dengan cara ini Anda dapat menyesuaikan
preferenceTheme
gaya tata letak yang digunakan untuk setiap tipe preferensi tanpa mempengaruhi bagian lain dari Aktivitas Anda.sumber
Saya baru saja menambahkan baris ini dalam tema dan berfungsi sempurna pada API 19 ke atas.
sumber
Solusi yang berhasil untuk saya di API 25. Saya memiliki tema default ini:
Dan menambahkan baris ini ke dalamnya
PreferenceThemeOverlay sudah ditentukan, saya tidak perlu memasukkannya. Ini bekerja pada perangkat Android 4.x dan 5.x saya sendiri
sumber
Tambahkan kode ini ke styles.xml Anda dan ubah sesuai. Ini harus bekerja dengan baik.
sumber
Saya menambahkan item "Preferensi Tema" ke dalam gaya saya dan itu tampaknya memperbaiki masalah:
sumber
Situs paling bermanfaat bagi saya: Medium
Penulis menunjukkan bahwa kita perlu menambahkan dua paket:
com.android.support:preference-v7
dancom.android.support:preference-v14
, karena yang pertama didistribusikan tanpa gaya.Beri tahu saya jika berhasil
sumber
"Takisoft Fix" yang diterima tampaknya agak kludgy dan setelah bermain-main dengannya, saya masih belum puas dengan tampilan yang dihasilkan.
Jika Anda memerlukan
PreferenceFragment
pustaka dukungan API 9+ , saya sarankan menggunakan Pustaka Dukungan Preferensi Material . Ini bekerja dengan sempurna (setidaknya untuk saya).sumber
Masalah terjadi karena AAPT (Alat Pengemasan Aset Android) tidak dapat menemukan beberapa sumber daya.Perbaiki masalah ini sebagai berikut:
1. Salin sumber daya yang diperlukan untuk folder sumber daya baru yang merespons, bernama seperti res_fw_v7_preference atau yang lainnya.
2. Menggunakan gradle untuk membangun aplikasi Anda dan menambahkan beberapa opsi AAPT tambahan di build.gradle (modul) seperti ini:
Semoga bermanfaat :)
sumber
Terima kasih @sergio untuk jawabannya, menggunakan
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
alih-alih<item name="preferenceTheme">@style/Preference</item>
berfungsi baik untuk saya.sumber
Biarkan saja dan gunakan API 11+.
API 7 sekarang hampir berumur tujuh tahun.
sumber