改变抽屉式导航栏菜单项的颜色
问题描述:
这是我目前的导航抽屉的样子:改变抽屉式导航栏菜单项的颜色
我把它分成4组。我正在尝试的是给每个组别一个不同的文字颜色。我正在尝试使用SETTINGS
,FEEDBACK
和TERMS AND CONDITIONS
这两个选项,使其具有较小的字体和略带黑色的颜色。我搜索了,但无法找到个别定制导航抽屉组的方法。这是我写的菜单代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/menu"
android:checkableBehavior="single">
<item
android:id="@+id/nav_targets"
android:icon="@drawable/icon_target"
android:title="Targets" />
<item
android:id="@+id/nav_testing"
android:icon="@drawable/icon_testing"
android:title="Testing" />
<item
android:id="@+id/nav_course_work"
android:icon="@drawable/icon_course_work"
android:title="Course Work" />
<item
android:id="@+id/nav_schedule"
android:icon="@drawable/icon_schedule"
android:title="Schedule" />
<item
android:id="@+id/nav_profile"
android:icon="@drawable/icon_profile"
android:title="Profile" />
</group>
<group
android:id="@+id/settings">
<item
android:title="SETTINGS"
android:id="@+id/settings_item"></item>
</group>
<group
android:id="@+id/feedback">
<item
android:title="FEEDBACK"
android:id="@+id/feedback_item"></item>
</group>
<group
android:id="@+id/TnC">
<item
android:title="TERMS & CONDITIONS"
android:id="@+id/t_n_c_item"></item>
</group>
有没有办法实现呢?
答
有两种方法可以分别定制导航抽屉菜单项。
第一种方式:
MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new ForegroundColorSpan(TEXT_COLOR), 0, s.length(), 0);
s.setSpan(new AbsoluteSizeSpan(TEXT_SIZE_in_dip, true), 0, s.length(), 0);
menuItem.setTitle(s);
方式二:
MenuItem menuItem = navigationView.getMenu().findItem(R.id.menu_item);
SpannableString s = new SpannableString(menuItem.getTitle());
s.setSpan(new TextAppearanceSpan(this, R.style.TextAppearance), 0, s.length(), 0);
menuItem.setTitle(s);
RES /价值/ styles.xml
<style name="TextAppearance">
<item name="android:textColor">TEXT_COLOR</item>
<item name="android:textSize">TEXT_SIZE_in_sp</item>
</style>
答
这应该用于更改导航抽屉中的所有菜单项颜色。
app:itemTextColor="@android:color/holo_orange_light"
这会在你的抽屉式导航栏被定义父活动的XML文件中定义。在这种情况下使用android.support.v4.widget.DrawerLayout;
和android.support.design.widget.NavigationView;
。
<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:layout_marginTop="@dimen/activity_vertical_margin"
app:headerLayout="@layout/nav_header_home"
app:itemTextColor="@android:color/holo_orange_light"
app:menu="@menu/activity_home_drawer" />
+0
谢谢,但我试图单独更改菜单项的颜色。这就像不同的菜单项具有不同的颜色。 –
答
您可以使用这一点,如果你想选择MenuItem
不同颜色的每个:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
selectItem(id, item);
drawer.closeDrawer(GravityCompat.START);
return true;
}
private void selectItem(int id, MenuItem item) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
switch (id) {
case R.id.nav_a:
Fragment newFragment = new FragmentA();
transaction.replace(R.id.content, newFragment);
transaction.commit();
/**
*Methods to refresh menu (i.e. set all MenuItems to default TextColor)
*and to then set TextColor of currently selected MenuItem
*/
refreshNavMenu();
setNavMenuItemColor(item, getResources().getColor(R.color.<Your Color>));
break;
case R.id.nav_b:
newFragment = new FragmentB();
transaction.replace(R.id.content, newFragment);
transaction.commit();
refreshNavMenu();
setNavMenuItemColor(item, Color.BLUE);
break;
}
}
private void refreshNavMenu() {
for (int i = 0; i < navigationView.getMenu().size(); i++) {
MenuItem item = navigationView.getMenu().getItem(i);
SpannableString span = new SpannableString(item.getTitle());
span.setSpan(new ForegroundColorSpan(Color.BLACK), 0, span.length(), 0);
item.setTitle(span);
}
}
private void setNavMenuItemColor(MenuItem item, int color) {
SpannableString span = new SpannableString(item.getTitle());
span.setSpan(new ForegroundColorSpan(color), 0, span.length(), 0);
item.setTitle(span);
}
检查这个答案将帮助您http://stackoverflow.com/a/32114570/2900893 –
没了,已经签这一个。它改变菜单中每个项目的颜色。我正在尝试仅针对一些项目进行更改 - 并非全部。 –
@ user5038993试试这个从strings.xml得到标题,在strings.xml中定义具有不同颜色的字符串。希望它有帮助 –