侧滑菜单DrawerLayout结合NavigationView使用时,点击菜单项没有水波纹效果的解决方法

6

我有一个问题,就是无法在我的抽屉中看到点击效果。

我的Activity XML布局如下:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <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"/>

</android.support.v4.widget.DrawerLayout>

您可以看到,我将 NavigationView 放入我的 DrawerLayout 中,然后使用菜单xml文件来填充 NavigationView

我的 activity_main_drawer.xml 如下所示:

<menu
xmlns:android="http://schemas.android.com/apk/res/android"
>
<group>
    <item
        android:id="@+id/id1"
        android:title="Item 1"/>
    <item
        android:id="@+id/id2"
        android:title="Item 2"/>
    <item
        android:id="@+id/id3"
        android:title="Item 3"/>
    <item
        android:id="@+id/id4"
        android:title="Item 4"/>
</group>

很不幸,以我这种方式做,当我在抽屉菜单中点击项目后,没有任何视觉效果。我希望能有所谓的“涟漪效应”。我该怎么做呢?


你正在测试哪个版本的操作系统? - azizbekian
@azizbekian 我使用的是Android 7.1.2。 - michalsol
5个回答

2

我也遇到过这个问题。

请移除以下属性:

clickable=true

focusableOnTouch=true

然后应用涟漪效果XML。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:color="@android:color/transparent"
tools:targetApi="lollipop"> <!-- ripple color -->

<item android:drawable="@android:color/transparent" /> <!-- normal color -->

我希望这能帮到你


2
你是指移除 clickable=truefocusableOnTouch=true 是什么意思?我没有这些属性。然而,你的解决方案也不起作用——仍然没有涟漪效果 :( - michalsol
1
为什么这个答案会得到两个赞和25个悬赏点?这毫无意义。 - Adil Hussain

2
您可以使用itemBackground属性并将其设置为?android:attr/selectableItemBackground,以便为您的NavigationView项目获得涟漪效果。"Original Answer"翻译成"原始答案"。
<android.support.design.widget.NavigationView
     /* ... other attributes... */
     app:itemBackground="?android:attr/selectableItemBackground"/>

0

可以通过以下方式添加涟漪效果。

在您的xml文件中,在NavigationView内添加itemBackground属性,如下所示:

app:itemBackground="@drawable/ripple_navigation_selector"

此外,在drawable-v21文件夹中,添加ripple_navigation_selector.xml文件。

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/ripplecolor" >
        <item android:drawable="@color/accentColor" />
        <item
            android:id="@android:id/mask"
            android:drawable="@android:color/white" />
</ripple>

很遗憾,涟漪效应仍然无法访问,这个解决方案不起作用。 - michalsol

0
可能是由于性能较慢,请尝试在onClick之前添加200-300毫秒的延迟。
public void itemClicked(MenuItem item) {
  Handler theHandler = new Handler();
  theHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //whatever you wish to do
                }
            }, 200);
}

不用担心,这么长的延迟对用户来说是看不到的,但会使波纹效果更加流畅。


这不是原因。解决方案没有帮助。 - michalsol

0
如果您正在使用appcompat,您可以将android:background="?attr/selectableItemBackground"添加到导航抽屉项的XML中。
上述解决方案取自此答案
希望这能帮到您。

它不起作用。它只会使抽屉变为透明,但涟漪效果仍然不可见。 - michalsol

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