在上下文操作模式期间选择时,ListView项目不会在视觉上"突出显示"

Gle*_*tor 8 android android-widget android-layout

我按照官方Android网站的教程创建了上下文操作菜单.使用下面的代码,当我长按其中一个ListView项目时,它被选中,但它不会直观地表明它已被选中.我正在使用Holo Light主题,我希望ListView中每个所选项目的背景颜色变为蓝色.

这是正常的行为吗?

我已经尝试过测试listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);,甚至没有一行会突出显示.

使用listView.setSelector(android.R.color.holo_blue_light);似乎突出显示上次选择的行,但它不突出显示所选的其他行.

我做错了什么,或者我是否需要手动进行背景更改?如果是这样,怎么样?

我也试过listView.setSelector(android.R.drawable.list_selector_background);这是一个真正的选择器,包含不同状态的项目.不幸的是,它仍然只适用于最近选择的ListView项目.

public class MyActivity extends ListActivity {

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        // The list is generated here

        ListView listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

        listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
            // implements empty methods
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Bra*_*das 2

在我看来,按照描述的方式应该是可能的,但不幸的是事实并非如此。

到目前为止,我发现您必须使用 XML 资源来描述当项目的“状态”为“激活”时背景的外观。

在“res/drawable/”目录中创建一个名为“list_item_background_activated.xml”的文件。

在其中定义类型选择器的根元素:

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

</selector>
Run Code Online (Sandbox Code Playgroud)

现在您应该修改相关资源(定义 ListItem 外观的资源)以引用此可绘制对象:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/list_item_background_activated" >
    ...
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)