Uygulamam için bir gece teması eklemeye çalışıyorum ve gezinme çekmecemdeki metin ve simgelerin koyu arka planla birlikte beyaza dönmesini sağlamak için yaklaşık üç saat harcadım. İşte bunu hakkında gitmeye çalışıyorum yoludur onCreate()
içinde 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);
}
nightMode
Çalışır çünkü boolean alakasız. Gece modu açık (0) olarak ayarlandığında, gezinme çekmecesinde seçilen menü öğesi beyaza döner. Ancak, bu yalnızca her öğe seçildiğinde olur ki bu açıkça uygunsuzdur. İşte drawer_dark.xml dosyam:
<?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>
Her öğe için şeffaf bir arka planda beyaz simgeler kullanıyorum, ancak gezinme çekmecesinin siyah arka planında siyah olarak görünüyorlar. Metnin rengini değiştirmek için bir xml çözümü aradım ve başımı kaşıyordum çünkü bunun neden gözden kaçtığını bilmiyorum.
Başarmaya çalıştığım şeyi elde etmek için biri bana dinamik bir çözüm önerebilir mi? Tüm yardımlar takdir edilmektedir, teşekkür ederim!
DÜZENLEME: Üçüncü taraf bir kitaplık kullanmıyorum, bu, destek kitaplığında sağlanan NavigationView. İşte XML düzeni:
<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
olarakDark
ve tersini değiştirmiyorsunuz ..