如何在触摸时突出显示ListView项?

Eug*_*ene 11 android android-listview

我有一个简单的ListView,我希望每个项目都在用户的触摸上突出显示.我认为这应该在默认情况下发生,但事实并非如此.你能建议吗?

ListView xml:

<ListView
    android:id="@+id/list_view"     
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:divider="#206600"
    android:dividerHeight="2dp"
    android:smoothScrollbar="true"
    android:background="#ffffff"
    >
</ListView>
Run Code Online (Sandbox Code Playgroud)

和我的适配器的代码:

private class MyAdapter extends ArrayAdapter<Task> {
        private LayoutInflater mInflater;

        public MyAdapter(Context context, int resource, List<Task> list) {
            super(context, resource, list);
            mInflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                v = mInflater.inflate(R.layout.list_item, null);
            }

            Task task = taskList.get(position);

            /* Setup views from your layout using data in Object here */

            return v;
        }
Run Code Online (Sandbox Code Playgroud)

Yon*_*lan 24

您可能希望发布实际的行布局代码,但我怀疑问题是您在列表行上设置背景颜色.默认情况下,选择器是在列表项后面绘制的(由于突出显示颜色位于文本后面,因此看起来更好).要么不在列表项上设置背景颜色,要么将其设置为在顶部绘制选择器而不是ListView的drawSelectorOnTopXML属性.

编辑:如果你真的必须有默认状态的不透明背景并且不想使用drawSelectorOnTop,你也可以尝试这样:在列表行上设置背景,但使用StateListDrawable @android:drawable/list_selector_background用于除默认状态之外的所有状态(你可以在drawables文件夹中为此定义一个xml文件;请参阅StateList 文档).

您还可以在外部背景行布局中嵌套布局,并将其背景设置为@android:drawable/list_selector_background; 这样,背景将在您的背景之上绘制,但在内容之下.