我一直试图从导航抽屉菜单上将背景色放置在特定项目上。但是,我找到了一些在Navigation Drawer上编码的解决方案,但是它会更改整个项目的颜色或选定项目的颜色。
这是我要制作的图像:
正如您可以从图像中检查的那样,我想在该单个项目上放置不同的背景和文本颜色,即“注销”项目的背景颜色。因此,我尝试使用app:actionLayout
自定义该菜单项。
到目前为止,我可以做一点,但是仍然存在一些布局规则问题,等等。
这是我到目前为止完成的图像:IMAGE
我很乐意分享和解决此问题。谢谢!
菜单/activity_main_drawer.xml
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:title="@string/nav_menu_mypage">
<menu>
<item
android:id="@+id/nav_mystudy"
android:icon="@drawable/nav_mypocket"
android:title="@string/mypage_mypocket" />
<item
android:id="@+id/nav_search"
android:icon="@drawable/nav_search"
android:title="@string/mypage_search" />
<item
android:id="@+id/nav_logout"
android:title=""
app:actionLayout="@layout/drawer_menu_item"
app:showAsAction="always"/>
<!--app:itemBackground="@drawable/nav_logout_background"-->
</menu>
</item>
</group>
</menu>
layout / drawer_menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:orientation="horizontal">
<ImageView
android:layout_width="30dp"
android:layout_height="match_parent"
android:src="@drawable/nav_logout"
android:gravity="center_vertical"/>
<TextView
android:id="@+id/item_text"
android:layout_marginLeft="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:text="Logout"
android:textSize="15dp"
android:textColor="@color/white"/>
</LinearLayout>
layout / activity_main.xml
<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:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemIconTint="@drawable/nav_item_icon_color"
app:itemTextColor="@drawable/nav_item_text_color"
app:itemBackground="@drawable/nav_item_background" />
drawable / nav_item_background.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:drawable="@color/drawer_menu_item_bg_pressed"/> <!-- #F0F0F0 -->
<item
android:state_checked="true"
android:drawable="@color/drawer_menu_item_bg_checked"/> <!-- #efefef -->
<item
android:state_selected="true"
android:drawable="@color/drawer_menu_item_bg_checked"/>
<item
android:drawable="@android:color/transparent"/>
</selector>
答案 0 :(得分:0)
尝试一下:
设置菜单项的文本颜色:
private void setTextColorForMenuItem(MenuItem menuItem, @ColorRes int color) {
SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(ContextCompat.getColor(this, color)), 0,
spanString.length(), 0);
menuItem.setTitle(spanString);
}
重置所有菜单项的文本颜色:
private void resetAllMenuItemsTextColor(NavigationView navigationView) {
for (int i = 0; i < navigationView.getMenu().size(); i++)
setTextColorForMenuItem(navigationView.getMenu().getItem(i), R.color.textPrimary);
}
我们快完成了,我们应该在onNavigationItemSelected方法中为每个菜单项设置文本颜色,如下所示:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
resetAllMenuItemsTextColor(navigationView);
setTextColorForMenuItem(item, R.color.colorPrimary);
switch (item.getItemId()) {
case R.id.nav_search_jobs:
setTextColorForMenuItem(item, R.color.nav_search);
// do other stuff
break;
case R.id.nav_job_recommended:
setTextColorForMenuItem(item, R.color.nav_recommendation);
// do other stuff
break;
}
}
答案 1 :(得分:0)
您必须使用android:background =“ color”作为导航菜单的背景色,例如:
<android.support.design.widget.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:id="@+id/shitstuff"
app:itemTextColor="@color/black"
app:menu="@menu/drawermenu"
android:background="@color/colorAccent"
android:layout_marginTop="-24dp"
/>
对于项目颜色,请使用itemTextColor =“ color”