Android:make list item with background clickable

时间:2013-11-07 19:42:29

标签: android android-drawable android-selector

我有一个列表,我已经使用自定义布局定义了自己的列表视图项。此布局具有自定义可绘制的背景。

我对ListView项目的自定义布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/item"
    android:clickable="true"
    android:focusable="true"
    android:focusableInTouchMode="true" >
    ...
</RelativeLayout>

我的自定义绘图item.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- background: shadow -->
    <item>
        <shape
            android:dither="true"
            android:shape="rectangle" >
            <corners android:radius="2dp" />

            <solid android:color="@color/itemShadowColor" />
        </shape>
    </item>

    <!-- foreground: surface -->
    <item android:bottom="2dp">
        <shape
            android:dither="true"
            android:shape="rectangle" >
            <corners android:radius="2dp" />

            <solid android:color="@color/itemBackgroundColor" />
        </shape>
    </item>

</layer-list>

现在这个项目不再可以点击了。

你能解释一下为什么,以及我需要做些什么才能拥有相同的行为(蓝色背景的选择器),如按钮点击?

1 个答案:

答案 0 :(得分:2)

selector文件夹中定义pressed及其defaultres/drawable个州(其中一个州将是您的@drawable/item)。将其设置为列表行布局的bg。

查看类似的问题和答案:Selector on background color of TextView

修改 理解和应用像谷歌这样的东西的最好方法是研究SDK并做类似的事情。例如,查看btn_default_holo_dark drawable。它是一个带状态的选择器,是的它是一个xml。

这是一个取自sdk(sdk\platforms\android-18\data\res\drawable\btn_default_holo_dark.xml

的选择器
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_window_focused="false" android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal_holo_dark" />
    <item android:state_window_focused="false" android:state_enabled="false"
        android:drawable="@drawable/btn_default_disabled_holo_dark" />
    <item android:state_pressed="true" 
        android:drawable="@drawable/btn_default_pressed_holo_dark" />
    <item android:state_focused="true" android:state_enabled="true"
        android:drawable="@drawable/btn_default_focused_holo_dark" />
    <item android:state_enabled="true"
        android:drawable="@drawable/btn_default_normal_holo_dark" />
    <item android:state_focused="true"
        android:drawable="@drawable/btn_default_disabled_focused_holo_dark" />
    <item
         android:drawable="@drawable/btn_default_disabled_holo_dark" />
</selector>

这些是从sdk(sdk\platforms\android-18\data\res\drawable-xhdpi)拍摄的图像:
enter image description here enter image description here enter image description here enter image description here enter image description here

将此drawable / selector(@drawable/btn_default_holo_dark)应用于任何视图时,您将拥有其状态。我希望这个样本能让我的答案更加清晰。