我在ListView中有一个自定义单元格。如何在触摸时突出显示?

时间:2012-09-24 22:11:04

标签: java android android-listview

我希望我的ListView中的单元格能够在触摸时突出显示(就像它们通常使用未修改的ListView一样)。如何使用我修改过的单元格做到这一点?

这是我的细胞的样子:

enter image description here

这是我的单元格的XML:

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

  <TableLayout
        android:id="@+id/tableLayout1"
        android:layout_width="fill_parent"
        android:layout_height="34dip"
        android:stretchColumns="0"
        android:divider="@null"       
         >

        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/plaincell"
            android:divider="@null"  >

            <TextView
                android:id="@+id/txtKey"
                android:text="Some text"
                android:textSize="16dip"
                android:textStyle="bold"
                android:layout_marginLeft="8dip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="left|center_vertical"
                android:layout_weight="1.0"
                android:layout_marginTop="6dp"
                android:layout_marginBottom="6dp"
                android:textColor="@color/black"
            />

            <TextView
                android:id="@+id/txtValue"
                android:text="Some text"
                android:textSize="16dip"
                android:layout_marginRight="8dip"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="right|center_vertical"
                android:layout_weight="1.0"
                android:layout_marginTop="6dp"
                android:layout_marginBottom="6dp"
                android:textColor="@color/darkblue"
            />

        </TableRow>

  </TableLayout>

</LinearLayout>

3 个答案:

答案 0 :(得分:2)

使LinearLayout的背景成为选择器drawable

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/myClickedStateDrawable" android:state_pressed="true" />
   <item android:drawable="@drawable/myNonClickedStateDrawable" />
</selector>

其中myClickedStateDrawable,myNonClickedStateDrawable是可绘制的,用于定义布局的背景

希望这会有所帮助

答案 1 :(得分:2)

你的背景可绘制应该是state list,它具有不同状态的不同图形(例如,按下,聚焦,都没有)。

编辑:要使用纯色,您可以执行以下操作:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@color/pressedcolor" android:state_pressed="true" />
   <item android:drawable="@color/unpressedcolor" />
</selector>

然后,您可以在资源文件中定义自己的颜色:

<resources>
    <color name="pressedcolor">#ff0000</color>
    <color name="unpressedcolor">#0000ff</color>
</resources>

答案 2 :(得分:1)

我看到发生了什么,但首先

  • 大多数只有一个孩子的布局都可以删除,
  • TableLayout和TableRow都基于LinearLayout类。

所以你真的有三个 LinearLayouts,你只需要一个

问题:
我假设这条线设置了一个覆盖整个布局的新背景颜色:

android:background="@drawable/plaincell"

这也涵盖或覆盖默认的ListView颜色选择器 如果要更改屏幕上每个UI元素的背景和文本颜色属性,您可能需要查看Styles and Themes。如果在主题中设置这些属性,则不需要创建新的颜色选择器来执行旧颜色选择器已经执行的操作。