TableRow 单击与 ListView 单击的效果相同

Posted

技术标签:

【中文标题】TableRow 单击与 ListView 单击的效果相同【英文标题】:Same effect on TableRow click as ListView click 【发布时间】:2015-08-08 22:22:42 【问题描述】:

我有一个动态列表视图:

<ListView android:layout_
    android:layout_
    android:fastScrollEnabled="true"
    android:choiceMode="singleChoice"
    android:dividerHeight="1dp"
    android:divider="#1f000000"
    android:background="@android:color/background_light"
    android:drawSelectorOnTop="true"/>

带单元格:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/list_ripple">

有波纹:

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

这很好用。

我的问题在我正在创建的另一个列表中。它是一个静态列表,所以我只是使用 TableLayout 和 TableRow 在 xml 中定义列表。有没有一种方法可以让我显示相同的“选定”状态。还有要显示的涟漪?

    <TableLayout android:layout_
        android:layout_
        android:stretchColumns="0">

        <TableRow android:id="@+id/about_row"
            android:layout_
            android:layout_
            android:paddingTop="16dp"
            android:paddingLeft="16dp"
            android:paddingBottom="20dp"
            android:clickable="true"
            android:background="@drawable/list_ripple">

我尝试将波纹放在背景元素上,但没有奏效。同样,最好的情况是获得灰色选择状态,表明表格行已被选中,如果可能的话,会出现波纹。

【问题讨论】:

到目前为止我发现的最好的方法是使用 ListView 并实现 BaseAdapter 来设置我想要的静态行样式。那时我得到列表视图涟漪和活动行为。 【参考方案1】:

我通过动态添加波纹来完成它,您可以尝试静态和动态。(v21)

你的波纹文件:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="?android:textColorHintInverse" />
        </shape>
    </item>
</ripple>

让你的row.setClickable(true)

在您的点击侦听器上将背景设置为可绘制的波纹,如下所示:

tableRow.setOnClickListener(new View.OnClickListener() 
                @TargetApi(Build.VERSION_CODES.LOLLIPOP)
                @Override
                public void onClick(View v) 
                    tableRow.setBackground(mContext.getDrawable(R.drawable.list_ripple));
                    Snackbar.make(v, "row Clicked", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                
            );

希望对你有所帮助

【讨论】:

以上是关于TableRow 单击与 ListView 单击的效果相同的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击两个按钮在单个活动中在 RecyclerView 和 ListView 之间切换?

ListView 项目的删除选项始终删除第一个项目,无论单击哪个项目

通过纯 JS 从 tablerow//<tr onClick(myFunction> 获取 element.innerHTML

与 ListView 战斗

如何强制 ListView 忽略单击/不突出显示单击的项目?

单击 ListView 上的删除按钮后删除 ListView 上的项目