Saya menggunakan pustaka Dukungan Desain Android baru untuk mengimplementasikan panel samping navigasi dalam aplikasi saya.
Saya tidak tahu cara mengubah warna item yang dipilih!
Berikut adalah xml dari menu tersebut:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
Dan berikut adalah navigationview xml yang ditempatkan di dalam android.support.v4.widget.DrawerLayout
:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Terima kasih untuk bantuannya !
[EDIT] Saya telah melihat solusi seperti ini: Ubah warna latar belakang menu android .
Tampaknya ini merupakan peretasan dan saya pikir dengan Perpustakaan Dukungan Desain baru, sesuatu yang lebih bersih akan diperkenalkan?
Jawaban:
Anda dapat mencapai ini menggunakan Color State Resource . Jika Anda melihat di dalam
NavigationView
Anda sedang menggunakanDi sini daripada menggunakan
@color/black
atau@color/primary_test
, gunakan fileColor State List Resource
. Untuk itu, pertama-tama buat direktori baruxml
(misalnya drawer_item.xml) di dalamcolor
direktori (yang seharusnya ada di dalamres
direktori.) Jika Anda belum memiliki direktori yangcolor
sudah bernama , buatlah.Sekarang di dalam
drawer_item.xml
lakukan sesuatu seperti iniLangkah terakhir adalah mengubah file
NavigationView
Seperti ini Anda dapat menggunakan terpisah Warna Negara Daftar Sumber Daya untuk
IconTint
,ItemTextColor
,ItemBackground
.Sekarang ketika Anda menyetel item sebagai dicentang (baik dalam
xml
atau secara terprogram), item tertentu akan memiliki warna yang berbeda dari yang tidak dicentang.sumber
Saya yakin
app:itemBackground
mengharapkan drawable. Jadi ikuti langkah-langkah di bawah ini:Buat file drawable
highlight_color.xml
dengan konten berikut:Buat file drawable lain
nav_item_drawable.xml
dengan konten berikut:Terakhir tambahkan
app:itemBackground
tag di NavView:di sini file highlight_color.xml mendefinisikan drawable warna solid untuk latar belakang. Nanti drawable warna ini ditetapkan ke pemilih nav_item_drawable.xml.
Ini berhasil untuk saya. Semoga ini bisa membantu.
********************************************** DIPERBARUI *** *******************************************
Meskipun jawaban yang disebutkan di atas memberi Anda kendali yang baik atas beberapa properti, tetapi cara yang akan saya gambarkan terasa lebih PADAT dan sedikit LEBIH KEREN .
Jadi yang bisa Anda lakukan adalah, Anda bisa mendefinisikan ThemeOverlay di
styles.xml
untuk NavigationView seperti ini:sekarang terapkan ThemeOverlay ini ke
app:theme
atribut NavigationView, seperti ini:Saya harap ini akan membantu.
sumber
android:background="@drawable/nav_item_drawable"
untuk widget lain seperti RadioButton, Checkbox, Button, dll. Mengurangi pemrograman bloatware untuk menanganisetOnCheckedChangeListener
hanya untuk penyorotan warna.Satu kebutuhan untuk mengatur
NavigateItem
check true setiap kali itemNavigateView
diklikadd
NavigationItemSelectedListener
onNavigationView
sumber
setChecked(true)
). Saya dapat melihat warna item yang dicentang berubah tetapi saya tidak dapat memodifikasinya sendiri, warnanya selalu merupakan versi yang lebih terang dari latar belakang navigasi.setChecked(true)
padaView
perubahan warna latar hingga tema perangkat yang Anda gunakan. Jika Anda mengubah latar belakang item ke warna lain maka Anda perlu mengembangkan tata letak Anda dalamDrawerLayout
atauNavigationView
dan menangani sendiri.Berikut adalah cara lain untuk mencapai ini:
}
sumber
Berikut cara melakukannya dalam metode onCreate Aktivitas Anda:
sumber
Langkah 1: Buat pemilih yang dicentang / tidak dicentang:
selector.xml
Langkah 2: gunakan atribut xml
app:itemTextColor
dalamNavigationView
widget untuk memilih warna teks.Langkah 3:
Untuk beberapa alasan ketika Anda menekan item dari
NavigationView
menu, itu tidak menganggap ini sebagai pemeriksaan tombol. Jadi, Anda perlu secara manual memeriksa item yang dipilih dan menghapus item yang dipilih sebelumnya. Gunakan pendengar di bawah ini untuk melakukan ituLangkah 4:
Untuk mengubah warna ikon, gunakan
app:iconTint
atribut diNavigationView
item menu, dan setel ke selektor yang sama.Hasil:
sumber