导航抽屉onClick项目涟漪效应丢失

时间:2014-11-05 08:38:44

标签: java android navigation-drawer onitemclicklistener

使用新的appcompat-v21我尝试构建一个导航抽屉..第一次没有写任何背景颜色或drawable,导航抽屉以透明背景开始!这么奇怪!但是,当我点击它的项目时,我可以看到Android棒棒糖的涟漪效应。 (惊人)。所以我试着像这样设置一个白色背景:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".HomeActivity"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

       <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar"/>

    </RelativeLayout>

     <ListView
            android:id="@+id/navdrawer"
            android:layout_width="315dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:fitsSystemWindows="true"
            android:clipToPadding="false"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#ffff"/>

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

导航抽屉现在是白色的,所以它是正确的。但是在这个背景下,我在项目点击中失去了涟漪效果。我的项目XML就是这个:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="?android:selectableItemBackground"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:id="@+id/spinnerLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="13dp"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >

            <ImageView
                android:id="@+id/sfondomappa"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_weight="0"
                android:adjustViewBounds="true"
                android:scaleType="center"
                android:src="@drawable/banner_nav" />

            <TextView
                android:id="@+id/drawerWelcome"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/sfondomappa"
                android:layout_centerHorizontal="true"
                android:background="#40000000"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_horizontal"
                android:padding="10dp"
                android:text="Hola"
                android:textColor="@color/ldrawer_color"
                android:textSize="14sp" />
        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/headerLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/drawerTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_gravity="center_horizontal"
            android:layout_margin="12dp"
            android:fontFamily="sans-serif-regular"
            android:gravity="center_horizontal"
            android:textColor="@color/main_orange"
            android:textSize="15sp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/itemLayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="?android:attr/activatedBackgroundIndicator"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true" >

            <ImageView
                android:id="@+id/drawer_icon"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:gravity="center_vertical"
                android:padding="3dp" />

            <TextView
                android:id="@+id/drawer_itemName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="32dp"
                android:fontFamily="sans-serif-medium"
                android:gravity="center_vertical"
                android:textColor="#E4000000"
                android:textSize="14sp" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

我甚至在我的根布局中写了android:background="?android:selectableItemBackground",但没有任何改变。我怎么解决?

编辑: 我用这种方式再次写了抽屉的列表视图

        <ListView
            android:id="@+id/navdrawer"
            android:layout_width="315dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:layout_marginRight="72dp"
            android:background="@android:color/white"
            android:choiceMode="singleChoice"
            android:divider="#00000000"
            android:dividerHeight="1.00dp"
            android:elevation="2dp"
            android:longClickable="false"
            android:orientation="vertical"
            android:overScrollMode="never"
            android:scrollbars="none" />

并且波纹起作用。但现在我失去了我点击的当前位置。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题......解决方案的记录不够好,但现在就是。

drawable-v21文件夹中创建一个drawable选择器:

    v21/activated_background.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/primary_dark" android:state_activated="true" />
        <item android:drawable="@color/primary" android:state_checked="true" />
        <item android:state_pressed="true">
            <ripple android:color="@color/primary" />
        </item>
        <item android:drawable="@color/background_light" />
    </selector>

正如您在上面的代码中所看到的,通过添加上面的<ripple ... />元素来完成魔术。它仅在v21 +中可用,因此您必须为-v21和normal指定单独的选择器。

最后,只需将此选择器绘制为所需元素的背景,在您的情况下为ListView项。