ListView自定义选中图标

ListView custom selected icon

我有一个 ListView,用户可以在其中 select 一些东西:

<ListView
    android:id="@+id/poll_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:choiceMode="singleChoice"
    android:listSelector="#666" />

效果很好。当用户选择某样东西时,该物品会用 #666 着色。但我更希望它显示自定义图标。例如。右对齐的复选标记图形。

我可以在我的项目视图中包含该图形。但是我如何根据状态显示它(而不必让 Adapter 必须跟踪检查状态并一直使所有数据无效)?

在 CSS 中,它是右对齐的背景图形,仅在 :active 上可见。但是如何在Android中做到呢?我认为以某种方式使用自定义可绘制对象应该是可能的。

您可以使用 9-patch drawable 来实现此效果:

左侧和顶部的黑条告诉 Android 在必要时通过在这些区域拉伸可绘制对象来调整可绘制对象的大小。在这种情况下,这两个区域都是透明的,因此会导致支票右对齐。

要在您的代码中使用它,只需将列表选择器设置为 9-patch 可绘制对象。像这样:

    lv.setSelector(R.drawable.ic_check_black_rightaligned);

或者像这样:

    ...
    android:listSelector="@drawable/ic_check_black_rightaligned"
    ...