使用NavigationView的DrawerLayout - 未在点击上显示涟漪效应

时间:2017-06-07 14:34:31

标签: android navigation-drawer drawerlayout navigationview android-navigationview

我在抽屉上看到可以看到点击效果的问题。

我的活动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>

不幸的是,当我这样做的时候,点击抽屉菜单中的项目后我没有任何视觉效果。我想要的是所谓的“涟漪效应”#34;。我该怎么办?

5 个答案:

答案 0 :(得分:1)

我也遇到过这个问题

请删除此属性:

<强>可点击=真

<强> focusableOnTouch =真

然后应用涟漪效果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 -->

我希望它能帮到你

答案 1 :(得分:1)

您可以将itemBackground属性与?android:attr/selectableItemBackground一起使用,以获取NavigationView物品的涟漪效应

<android.support.design.widget.NavigationView
     /* ... other attributes... */
     app:itemBackground="?android:attr/selectableItemBackground"/>

答案 2 :(得分:0)

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

将itemBackground添加到xml文件中的NavigationView中,具有以下属性:

  

应用程式:itemBackground = “@绘制/ 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>

答案 3 :(得分:0)

如果您使用的是appcompat,可以将其添加到导航抽屉项android:background="?attr/selectableItemBackground"的XML中。

上述解决方案取自answer

希望这会对你有所帮助。

答案 4 :(得分:0)

这可能是由于性能下降,尝试在onClick上做任何事情之前添加200-300ms的延迟。

public void itemClicked(MenuItem item) {
  Handler theHandler = new Handler();
  theHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //whatever you wish to do
                }
            }, 200);
}

不要担心这么多延迟对用户不可见,但会平滑地显示涟漪效应。