Android如何使视图在点击时高亮显示?

39

我有一个线性布局,每一行都是通过编程膨胀而成的,我想让这些行在点击时像ListView一样运作。也就是说,我希望行以与默认ListView完全相同的方式/颜色突出显示。我该如何实现这个功能?

5个回答

57

好的,我终于弄清楚如何完成这个操作了...基本上它是通过类似于链接到样式的颜色选择器来完成的,只不过在状态中使用可绘制项而不是“color”,并且您可以通过以下方式引用在ListView中使用的默认列表可绘制项:

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

我希望使用这个XML作为我的View的背景。

所有公共默认的可绘制资源可以在这里找到:http://developer.android.com/reference/android/R.drawable.html


一旦您找到了它,请回复并分享。 - Jerry Brady
6
如果你和我一样需要了解如何使用这种选择器的背景知识,请阅读:http://android-journey.blogspot.com/2009/12/android-selectors.html - Eric S. Bullington
你是否知道如何保持textview选定状态?我有两个fragment,一个是listview,另一个是信息的textview。一旦选择了listview中的项目,textview中的项目会更改。是否有办法保持所选的列表项选定状态? - ksudu94

23

我也可以使用以下方式使一个文本视图表现得像一个列表项:

<Textview
....
android:background="@android:drawable/list_selector_background"
/>

8
好的回答。对于API 11及以上版本,请改用android:background="?android:attr/selectableItemBackground"。更多信息请参见此处 - x-code
1
使用appcompat-v7库,您现在可以使用?attr/selectableItemBackground来实现向后兼容性。 - Egor

2

如果您仍然遇到问题,请记住一些UI元素(RelativeLayout)不可点击,因此您需要添加一行:

<RelativeLayout 
    ....
    android:clickable="true"
    ...

2

这个页面可能是你开始查找的好地方。

虽然,我建议你使用 ListView 本身,而不是再次实现它。


我会使用ListView,但是我需要它不滚动并将其放置在ScrolView中,这似乎不可能(??)...所以最终我尝试使用LinearLayout来实现自己的ListView。 - Kman
谢谢您的链接,但是是否可能引用和使用默认的ListViews选择器元素而不是创建我的元素呢? - Kman
你可以尝试在Android源代码中搜索XML文件,然后复制过去。不过我不确定你是指现有的选择器还是其他什么。 - st0le
抱歉,我无法确定ListView使用哪个...不管怎样,我尝试创建自己的ListView,但似乎不起作用,我遇到了问题:我想要整个LinearLayout都能高亮显示,那么我应该设置什么属性作为颜色选择器呢?我尝试使用textColour,但似乎不起作用,而background会导致崩溃,因为我只能将drawable或单一颜色设置为背景:S - Kman

1
将属性设置为您的列表视图
android:listSelector="@color/test"

此测试颜色集可设置任何透明的颜色。你可以使用十六进制透明颜色创建任何透明颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接