gpt4 book ai didi

android - 通过自定义选择器的 ListView 项目背景

转载 作者:IT老高 更新时间:2023-10-28 13:05:12 26 4
gpt4 key购买 nike

是否可以通过列表选择器为每个 Listview 项应用自定义背景?

默认选择器为 state_focused="false" 情况指定 @android:color/transparent,但将其更改为某些自定义可绘制对象不会影响没有被选中。 Romain Guy 似乎建议 in this answer这是可能的。

我目前通过在每个 View 上使用自定义背景并在选择/聚焦/显示选择器时隐藏它来实现相同的效果,但是将所有这些都定义在一处。

作为引用,这是我用来尝试使其正常工作的选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_focused="false"
android:drawable="@drawable/list_item_gradient" />

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/list_selector_background_disabled" />

<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />

<item android:state_focused="true"
android:drawable="@drawable/list_selector_background_focus" />

</selector>

这就是我设置选择器的方式:

<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector_background" />

提前感谢您的帮助!

最佳答案

我自己对此感到沮丧,最终解决了它。正如 Romain Guy 所暗示的,您必须使用另一个状态 "android:state_selected"。为列表项的背景使用可绘制的状态,并为列表的 listSelector 使用不同的可绘制状态:

list_row_layout.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="?android:attr/listPreferredItemHeight"
android:background="@drawable/listitem_background"
>
...
</LinearLayout>

listitem_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/android:transparent" />
<item android:drawable="@drawable/listitem_normal" />
</selector>

包含 ListView 的 layout.xml:

...
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:listSelector="@drawable/listitem_selector"
/>
...

listitem_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/listitem_pressed" />
<item android:state_focused="true" android:drawable="@drawable/listitem_selected" />
</selector>

关于android - 通过自定义选择器的 ListView 项目背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2562051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com