Saya mencoba menambahkan tema malam untuk aplikasi saya dan saya telah menyia-nyiakan hampir tiga jam hanya untuk mencoba membuat teks dan ikon di laci navigasi saya menjadi putih bersama dengan latar belakang gelap. Inilah cara saya mencoba melakukan ini onCreate()
di MainActivity.java
:
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
// This method will trigger onItemClick of navigation menu
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
// Checking if the item is in checked state or not, if not make it in checked state
if (menuItem.isChecked())
menuItem.setChecked(false);
else menuItem.setChecked(true);
if (nightMode == 0) {
SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); // fix the color to white
menuItem.setTitle(spanString);
}
The nightMode
boolean tidak relevan karena ia bekerja. Saat mode malam disetel ke aktif (0), item menu apa pun yang dipilih di panel samping navigasi berubah menjadi putih. Namun, itu hanya terjadi ketika setiap item dipilih yang jelas tidak nyaman. Ini drawer_dark.xml saya:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:checkableBehavior="single">
<item
android:id="@+id/unitone"
android:checked="true"
android:icon="@drawable/one_white"
android:title="Classical Period" />
<item
android:id="@+id/unittwo"
android:checked="false"
android:icon="@drawable/two_white"
android:title="Postclassical Period" />
<item
android:id="@+id/unitthree"
android:checked="false"
android:icon="@drawable/three_white"
android:title="Early Modern Era" />
<item
android:id="@+id/unitfour"
android:checked="false"
android:icon="@drawable/four_white"
android:title="Dawn of Industrial Age" />
<item
android:id="@+id/unitfive"
android:checked="false"
android:icon="@drawable/five_white"
android:title="Modern Era" />
</group>
</menu>
Saya menggunakan ikon putih pada latar belakang transparan untuk setiap item, namun ikon tersebut muncul sebagai hitam pada latar belakang hitam panel samping navigasi. Saya telah mencoba mencari solusi xml untuk mengubah warna teks dan saya menggaruk-garuk kepala karena saya tidak tahu mengapa hal ini terlewatkan.
Dapatkah seseorang menawarkan solusi dinamis untuk mendapatkan apa yang ingin saya capai? Semua bantuan dihargai, terima kasih!
EDIT: Saya tidak menggunakan pustaka pihak ketiga, ini adalah NavigationView yang disediakan di pustaka dukungan. Berikut tata letak XML:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="7dp"
tools:context=".MainActivity"
android:fitsSystemWindows="true" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/ColorDark" />
<include layout="@layout/toolbar" />
</FrameLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:background="#000"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer" />
</android.support.v4.widget.DrawerLayout>
Light
menjadiDark
dan sebaliknya ..Jawaban:
<android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:background="#000" android:layout_height="match_parent" android:layout_width="match_parent" android:layout_gravity="start" app:headerLayout="@layout/header" app:itemTextColor="your color" app:menu="@menu/drawer" />
sumber
Gunakan app: itemIconTint di NavigationView Anda, ej:
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:itemTextColor="@color/customColor" app:itemIconTint="@color/customColor" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_home" app:menu="@menu/activity_home_drawer" />
sumber
NavigationView
memiliki metode yang disebutsetItemTextColor()
. Ini menggunakanColorStateList
.Di sinilah saya mendapat jawaban itu. Dan kemudian tepat setelah menetapkan NavigationView saya:
sumber
Opsi lanjutan:
Anda juga dapat mengubah judul grup dengan mengganti "textColorSecondary"
Di styles.xml Anda
<style name="AppTheme.NavigationView"> <item name="android:textColorSecondary">#FFFFFF</item> </style>
Dalam tata letak Anda
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/activity_main_menu_drawer_drawer" android:theme="@style/AppTheme.NavigationView" app:itemIconTint="@color/colorPrimary" app:itemTextColor="@color/white"/>
sumber
tambahkan app: itemTextColor = "# fff" di NavigationView Anda seperti
<android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" app:menu="@menu/slider_menu" android:background="@color/colorAccent" app:itemTextColor="#fff" android:id="@+id/navigation_view" android:layout_gravity="start"/>
sumber
Saya menggunakan kode di bawah ini untuk mengubah warna teks laci Navigasi di aplikasi saya.
sumber
Di Masa Depan jika ada yang datang ke sini menggunakan, Aktivitas Laci Navigasi (disediakan oleh Studio di jendela Prompt Aktivitas)
Jawabannya adalah -
Gunakan ini sebelum OnCreate () di MainActivity
dan gunakan ini di onNavigationItemSelected () di MainActivity (Anda tidak perlu Menulis fungsi ini jika Anda menggunakan aktivitas Panel Samping Navigasi, ini akan ditambahkan di MainActivity).
Tip - tambahkan kode ini sebelum kondisi If else di onNavigationItemSelected ()
sumber
Ini berhasil untuk saya. sebagai ganti customTheme Anda bisa menempatkan tema Anda dalam gaya. dalam kode ini Anda juga dapat mengubah font dan ukuran teks.
<style name="MyTheme.NavMenu" parent="CustomTheme"> <item name="android:textSize">16sp</item> <item name="android:fontFamily">@font/ssp_semi_bold</item> <item name="android:textColorPrimary">@color/yourcolor</item> </style>
di sini adalah tampilan navigasi saya
<android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:theme="@style/MyTheme.NavMenu" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"> <include layout="@layout/layout_update_available"/> </android.support.design.widget.NavigationView>
sumber
Anda dapat melakukannya hanya dengan menambahkan tema Anda ke Tampilan navigasi Anda.
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" android:background="@color/colorPrimary" android:theme="@style/AppTheme.NavigationView" app:headerLayout="@layout/nav_header_drawer" app:menu="@menu/activity_drawer_drawer"/>
dan di file style.xml Anda, Anda akan menambahkan tema ini
<style name="AppTheme.NavigationView" > <item name="colorPrimary">@color/text_color_changed_onClick</item> <item name="android:textColorPrimary">@color/Your_default_text_color</item> </style>
sumber
Anda dapat menggunakan drawable di
app: aplikasi itemTextColor: itemIconTint
maka Anda dapat mengontrol status yang dicentang dan status normal menggunakan drawable
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:itemHorizontalPadding="@dimen/margin_30" app:itemIconTint="@drawable/drawer_item_color" app:itemTextColor="@drawable/drawer_item_color" android:theme="@style/NavigationView" app:headerLayout="@layout/nav_header" app:menu="@menu/drawer_menu">
drawer_item_color.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/selectedColor" android:state_checked="true" /> <item android:color="@color/normalColor" /> </selector>
sumber
coba ini di kelas java
sumber
Ini dapat membantu. Ini berhasil untuk saya
sumber
Dalam kasus saya, saya perlu mengubah warna hanya satu item menu - "Logout". Saya harus menjalankan rekursi dan mengubah warna judul:
Saya melakukan ini dalam metode onCreate Aktivitas.
sumber
Anda juga dapat menentukan tema khusus yang diturunkan dari tema dasar Anda:
<android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:id="@+id/nav_view" app:headerLayout="@layout/nav_view_header" app:menu="@layout/nav_view_menu" app:theme="@style/MyTheme.NavMenu" />
dan kemudian di file styles.xml Anda:
<style name="MyTheme.NavMenu" parent="MyTheme.Base"> <item name="android:textColorPrimary">@color/yourcolor</item> </style>
Anda juga dapat menerapkan lebih banyak atribut ke tema khusus.
sumber
Untuk mengubah warna teks individual dari satu item, gunakan SpannableString seperti di bawah ini:
sumber
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:itemBackground="@drawable/drawer_item_bg" app:headerLayout="@layout/nav_header_home" app:menu="@menu/app_home_drawer" />
Untuk mengatur Latar Belakang Item menggunakan app: itemBackground
drawer_item_bg.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" > <solid android:color="@android:color/transparent" /> </shape> </item> <item android:top="-2dp" android:right="-2dp" android:left="-2dp"> <shape> <padding android:bottom="0dp" android:left="15dp" android:right="0dp" android:top="0dp"/> <solid android:color="@android:color/transparent" /> <stroke android:width="0.5dp" android:color="#CACACA" /> </shape> </item> </layer-list>
sumber
itemIconTint, jika Anda ingin mengubah warna ikon
sumber
untuk mengubah warna teks Panel Samping Navigasi
kita gunakan
app:itemTextColor="@color/white"
untuk mengubah warna incon dari laci navigasi
menggunakan
app:itemIconTint="@color/black"
<com.google.android.material.navigation.NavigationView android:id="@+id/naView" app:itemIconTint="@color/black" android:layout_width="match_parent" app:menu="@menu/navmenu" app:itemTextColor="@color/white" app:headerLayout="@layout/nav_header" android:layout_height="match_parent" app:itemTextAppearance="?android:textAppearanceMedium" android:fitsSystemWindows="true" android:layout_gravity="start" />
sumber