Kompatibilitas Action Bar telah ditambahkan ke perpustakaan dukungan, revisi 18. Sekarang memiliki ActionBarActivity
kelas untuk membuat aktivitas dengan Action Bar pada versi Android yang lebih lama.
Apakah ada cara untuk menambahkan Action Bar dari perpustakaan dukungan ke PreferenceActivity
?
Sebelumnya saya menggunakan ActionBarSherlock dan itu SherlockPreferenceActivity
.
Jawaban:
EDIT: Di appcompat-v7 22.1.0 Google menambahkan kelas abstrak AppCompatDelegate sebagai delegasi yang dapat Anda gunakan untuk memperluas dukungan AppCompat ke aktivitas apa pun.
Gunakan seperti ini:
Tidak ada lagi peretasan. Kode diambil dari AppCompatPreferenceActivity.java .
sumber
(ViewGroup) getWindow().getDecorView().getRootView()
Saat ini tidak ada cara untuk mencapai dengan AppCompat. Saya sudah membuka bug secara internal.
sumber
PreferenceActivity
menambahkannyaActionBarCompat
?Saya telah berhasil membuat solusi yang mirip dengan apa yang digunakan Google Play Store. Tautan ke Jawaban Asli
Silakan temukan Repo GitHub: Di Sini
Sangat mirip dengan kode Anda sendiri tetapi menambahkan xml untuk memungkinkan judul ditetapkan:
Terus menggunakan
PreferenceActivity
:settings_toolbar.xml :
SettingsActivity.java :
Result :
UPDATE (Kompatibilitas roti jahe):
Seperti yang ditunjukkan di sini , Perangkat Gingerbread mengembalikan NullPointerException pada baris ini:
MEMPERBAIKI:
SettingsActivity.java :
Masalah apa pun di atas beri tahu saya!
UPDATE 2: TUTING WORKAROUND
Seperti yang ditunjukkan dalam banyak catatan dev
PreferenceActivity
tidak mendukung pewarnaan elemen, namun dengan memanfaatkan beberapa kelas internal Anda BISA mencapai ini. Itu sampai kelas-kelas ini dihapus. (Bekerja menggunakan dukungan appCompat-v7 v21.0.3).Tambahkan impor berikut:
Kemudian timpa
onCreateView
metode:Result:
AppCompat 22.1
AppCompat 22.1 memperkenalkan elemen berwarna baru, yang berarti bahwa tidak ada lagi kebutuhan untuk menggunakan kelas internal untuk mencapai efek yang sama dengan pembaruan terakhir. Alih-alih ikuti ini (masih menimpa
onCreateView
):LAYAR PREFERENSI YANG BERTAHAN
Banyak orang mengalami masalah dengan memasukkan Toolbar di dalam nested
<PreferenceScreen />
, namun, saya telah menemukan solusinya !! - Setelah banyak coba-coba!Tambahkan yang berikut ke Anda
SettingsActivity
:Alasan yang
PreferenceScreen
menyusahkan adalah karena mereka didasarkan sebagai dialog pembungkus, jadi kita perlu menangkap tata letak dialog untuk menambahkan bilah alat ke dalamnya.Bayangan Bilah Alat
Dengan mengimpor desain,
Toolbar
ini tidak memungkinkan elevasi dan bayangan pada perangkat pre-v21, jadi jika Anda ingin memiliki elevasi pada Anda,Toolbar
Anda harus membungkusnya dalamAppBarLayout
:`settings_toolbar.xml:
Tidak lupa untuk menambahkan tambahkan pustaka Dukungan Desain sebagai ketergantungan pada
build.gradle
file:Android 6.0
Saya telah menyelidiki masalah tumpang tindih yang dilaporkan dan saya tidak dapat mereproduksi masalah ini.
Kode lengkap yang digunakan seperti di atas menghasilkan yang berikut:
Jika saya kehilangan sesuatu tolong beri tahu saya melalui repo ini dan saya akan menyelidiki.
sumber
:)
PreferenceActivity
rasa sakit di pantat untuk digunakan ??? itu seharusnya menghemat waktu. Saya mungkin juga membuat aktivitas reguler dan secara manual menata semua pengaturan dalam tata letak linier sendiri. Fuuuuck!Menemukan implementasi PreferenceFragment berdasarkan pada support-v4 Fragment:
https://github.com/kolavar/android-support-v4-preferencefragment
Sunting: Saya baru saja mengujinya dan kerjanya sangat bagus!
sumber
Mengintegrasikan
PreferenceActivity
dengan ABC tidak mungkin, setidaknya bagi saya. Saya mencoba dua kemungkinan yang bisa saya temukan tetapi tidak ada yang berhasil:Pilihan 1:
ActionBarPreferenceActivity
meluasPreferenceActivity
. Ketika Anda melakukan ini, Anda dibatasi olehActionBarActivityDelegate.createDelegate(ActionBarActivity activity)
. Anda juga perlu menerapkanActionBar.Callbacks
yang tidak dapat diaksesPilihan 2:
ActionBarPreferenceActivity
meluasActionBarActivity
. Pendekatan ini membutuhkan penulisan ulang yang benar-benar baruPreferenceActivity
,PreferenceManager
dan mungkinPreferenceFragment
artinya Anda memerlukan akses ke kelas tersembunyi seperticom.android.internal.util.XmlUtils
Solusi ini hanya dapat datang dari Google devs yang mengimplementasikan danActionBarWrapper
dapat ditambahkan ke aktivitas apa pun.Jika Anda benar-benar membutuhkan kegiatan preferensi, saran saya untuk saat ini adalah
ActionBarSherlock
.Namun, saya berhasil mengimplementasikannya di sini .
sumber
Latar Belakang Masalah:
OP ingin tahu bagaimana kita dapat menempatkan
MenuItem
s diActionBar
dariPreferenceActivity
untuk pra-Honeycomb karena dukungan perpustakaan Android memiliki bug yang tidak memungkinkan ini terjadi.Solusi Saya:
Saya telah menemukan cara yang jauh lebih bersih, daripada yang sudah diusulkan, untuk mencapai target (dan menemukannya di Android Docs ):
Sekarang lakukan apa yang biasanya Anda lakukan di
onOptionsItemSelected()
. Karena ini adalah bagian dari Android Documents, itu tidak memiliki efek samping.Selamat coding. :)
Memperbarui:
Solusi ini tidak lagi berfungsi jika Anda menargetkan Lollipop. Jika Anda menggunakan AppCompat, jawaban ini adalah yang seharusnya Anda cari.
sumber
PreferencesActivity
tidak ada cara untuk menempatkan barangActionBar
, terutama tombol kembali. Jawaban saya adalah perbaikan yang bagus untuk itu.:)
Saya bisa
android.app.Actionbar
menggunakangetActionBar()
. Awalnya mengembalikan nilai nol ... lalu saya pergi ke manifes dan mengubah tema menjadi:Kemudian saya dapat memiliki actionbar lagi. Saya berasumsi ini hanya akan berfungsi untuk level build tertentu. Jadi, Anda mungkin ingin melakukan pemeriksaan untuk nomor build atau memeriksa apakah nilai yang dikembalikan adalah nol.
Ini akan baik-baik saja bagi saya karena aplikasi yang sedang saya kerjakan adalah untuk
ICS/4.0
+.sumber
Sekarang jawaban resmi untuk masalah ini telah dirilis. Ini adalah perpustakaan Dukungan Preferensi v7 / v14 .
Lihat Bagaimana cara menggunakan pustaka Dukungan Preferensi v7 / v14? untuk diskusi bagaimana menggunakannya.
sumber