使用NavigationView上的itemBackground产生涟漪效果

4

我想知道是否有人在重新定义NavigationView中的项目背景时遇到了问题,使用app:itemBackground?无论我按哪个项目,都会出现截图中显示的行为,最后一个项目显示涟漪效果。

这是我的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" />

ripple fail


你能发布你的“menu”文件吗? - Mohammad Ersan
1
@Javier,你解决了NavigationView的涟漪效果问题吗? - Herry
1
是的,现在使用com.android.support:design:23.4.0已经可以正常工作了。 - Herry
2
你找到解决方案了吗?使用com.android.support:design:23.4.0,问题仍然存在... - Ivelius
3个回答

0

1
抱歉!那正是我所拥有的代码,我复制错了,已经编辑了问题。 - Javier Mendonça

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);
            }
        }
    });

你从哪里获取'mMenuItems'的值? - Gallal

-1
itemBackground属性应用于menu而不是NavigationView。这样,涟漪效果就会被限制在处理触摸事件的菜单项内。

1
在菜单中应用它的位置 - Ravi Yadav
@user3138859 - 直接将itemBackground属性添加到menu资源定义中。在示例中,此资源在drawer_menu.xml中定义。 - kpowz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接