Android 更改导航抽屉菜单项的颜色
这是我当前导航抽屉的外观: 我把它分成4组。我所要做的就是给每个小组一个不同的文本颜色。我正在尝试使用Android 更改导航抽屉菜单项的颜色,android,navigation-drawer,Android,Navigation Drawer,这是我当前导航抽屉的外观: 我把它分成4组。我所要做的就是给每个小组一个不同的文本颜色。我正在尝试使用设置、反馈和条款和条件等选项,使字体变小,颜色变黑。我搜索了,但找不到一种方法来单独定制导航抽屉组。以下是我为菜单编写的代码: <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/menu" android:checkableBe
设置
、反馈
和条款和条件
等选项,使字体变小,颜色变黑。我搜索了,但找不到一种方法来单独定制导航抽屉组。以下是我为菜单编写的代码:
<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>
有什么方法可以实现吗?这应该适用于更改导航抽屉中所有菜单项的颜色。
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" />
有两种方法可以分别自定义导航抽屉菜单项
第一种方式:
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);
第二种方式:
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/values/styles.xml
文字颜色
文本大小(单位:sp)
如果要为每个选定的菜单项使用不同的颜色,可以使用此选项:
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);
}
public boolean onNavigationItemSelected(菜单项项){
//处理导航视图项单击此处。
int id=item.getItemId();
选择项目(id,项目);
抽屉。关闭抽屉(重力压缩机启动);
返回true;
}
私有void selectItem(int-id,MenuItem-item){
FragmentTransaction=getSupportFragmentManager().beginTransaction();
开关(id){
案例R.id.nav_a:
Fragment newFragment=新FragmentA();
事务。替换(R.id.content,newFragment);
commit();
/**
*刷新菜单的方法(即将所有菜单项设置为默认文本颜色)
*然后设置当前选定菜单项的TextColor
*/
刷新菜单();
setNavMenuItemColor(item,getResources().getColor(R.color.));
打破
案例R.id.nav_b:
newFragment=newfragmentb();
事务。替换(R.id.content,newFragment);
commit();
刷新菜单();
setNavMenuItemColor(项目,颜色为蓝色);
打破
}
}
私有菜单(){
对于(int i=0;i
检查此答案将对您有所帮助不,已经检查了此答案。它会改变菜单中每个项目的颜色。我只尝试对一些项目进行更改,而不是全部。@user5038993尝试从strings.xml获取标题,并在strings.xml中定义具有不同颜色的字符串。希望如此helps@JagjitSingh,我尝试使用html设置颜色(请参阅答案),但我认为这只适用于文本视图。这对我不起作用。返回了包含html标记的整个字符串。@user5038993发布完整的代码,但我正在尝试分别更改菜单项的颜色。这就像不同的菜单项有不同的颜色。