我想知道在使用app:itemBackground"
的NavigationView上重新定义项目背景时是否有人遇到问题?我得到截图上显示的行为,无论我按什么项目,我按最后一项显示的是涟漪。
这是我的drawer_menu.xml
:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single" android:id="@+id/first_group">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_home"
android:title="@string/nav_home" />
</group>
<group android:id="@+id/second_group">
<item
android:id="@+id/nav_settings"
android:title="@string/nav_settings" />
<item
android:id="@+id/nav_about"
android:title="@string/nav_about" />
<item
android:id="@+id/nav_logout"
android:title="@string/nav_logout" />
</group>
</menu>
我的my_ripple.xml
:
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#ffff0000">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
我的NavigationView:
<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:background="@android:color/white"
app:headerLayout="@layout/drawer_header"
app:itemBackground="@drawable/my_ripple"
app:itemIconTint="@color/drawer_item"
app:itemTextColor="@color/drawer_item"
app:menu="@menu/drawer_menu" />
答案 0 :(得分:0)
Ripple drawables应该像这个样本一样定义:
<!-- A red ripple masked against an opaque rectangle. -->
<ripple android:color="#ffff0000">
<item android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
了解更多
https://developer.android.com/reference/android/graphics/drawable/RippleDrawable.html
答案 1 :(得分:0)
现在可能的解决方法 - 只为寻找和以防万一的人......
在onCreate中为导航视图添加addOnGlobalLayoutListener,并在每个菜单项上应用Drawable。
/**
* Contains the {@link MenuItem} views in the {@link NavigationView}
*/
private final ArrayList<View> mMenuItems = new ArrayList<>(5);
// Grab the NavigationView Menu
final Menu navMenu = mNavigationView.getMenu();
mNavigationView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Remember to remove the installed OnGlobalLayoutListener
mNavigationView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// Loop through and find each MenuItem View
for (int i = 0, length = 5; i < length; i++) {
final MenuItem item = navMenu.getItem(i);
mNavigationView.findViewsWithText(mMenuItems, item.getTitle(), View.FIND_VIEWS_WITH_TEXT);
}
// Loop through each MenuItem View and apply your custom Typeface
for (final View menuItem : mMenuItems) {
//Create RippleDrawable called myRipple
((TextView) menuItem).setBackground(myRipple);
}
}
});
答案 2 :(得分:-1)
将itemBackground
属性应用于menu
而不是NavigationView
。然后,纹波将保持包含在处理触摸事件的菜单项中。