在列表视图中显示当前选择

时间:2012-03-15 23:04:25

标签: android android-listview

正如平板电脑版gmail和google talk中所见,我试图在列表视图中显示当前选择。我知道这不是标准做法,应该在必要时避免使用。在我的程序中,列表视图总是在屏幕上,点击的项目显示右侧的新片段(类似于gmail和google talk)。

为了避免用户猜测选择了哪个项目,我想显示当前的选择,我尝试创建一个选择器但是在点击它之后它会变回正常的背景。

我怎样才能做到这一点?

这是我的选择器xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/list_item_bg2" android:state_pressed="false" android:state_selected="false"
    android:state_focused="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="true" android:state_checked="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="true"
    android:state_selected="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="false" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true" android:state_focused="true"
    android:state_selected="true" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>



</selector> 

4 个答案:

答案 0 :(得分:73)

Gmail和类似应用使用的是activated状态,具有适当的行布局。参见:

简而言之,你:

  • 使用具有激活背景的行布局(例如android.R.layout.simple_list_item_activated_1
  • setChoiceMode(ListView.CHOICE_MODE_SINGLE)
  • 上使用ListView
  • 使用setItemChecked()上的ListView“检查”应激活的行,以启用“已激活”状态并拥有持久性突出显示

答案 1 :(得分:9)

您的另一个选择是将自定义列表项的背景设置为 android:background =“?android:attr / activatedBackgroundIndicator”

答案 2 :(得分:8)

如果您为每一行使用自定义布局:

  1. 使用 android:state_activated =“true”
  2. 创建一个选择器
  3. 将其应用为自定义布局的背景。
  4. 选择器drawable的一个例子:

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

答案 3 :(得分:0)

什么对我有用

  1. 覆盖主题中的全局ListView样式

    <item name="android:listViewStyle">@style/MyListView</item>

  2. 定义你的风格

    <style name="MyListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview_background_selector</item> </style>

  3. 定义选择器listview_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@color/ListViewBackGroundColorPressed" android:state_activated="true" /> </selector>

  4. 设置listview-item-layout的背景

    android:background="?android:attr/activatedBackgroundIndicator"