现在我正在使用:
android:listSelector="@drawable/bg_list_item"
android:drawSelectorOnTop="true"
其中bg_list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<item android:state_selected="true">
<shape android:shape="rectangle">
<gradient android:startColor="#0000ff"/>
</shape>
</item>
<item android:state_focused="false"
android:state_pressed="false"
android:state_selected="false">
<shape android:shape="rectangle">
<gradient android:startColor="#ff0000"/>
</shape>
</item>
但是第一个项目不起作用,并且所选项目有时在滚动时不显示(当我在列表视图的顶部/底部附近时),而从不在listView.setSelection(索引)上。
我是否必须突出显示当前的programmaticaly项目?
答案 0 :(得分:3)
这是因为touchmode中没有选定的项目。有关说明,请参阅here。
你可以用选择器来做,但它需要三件事......
1)您必须使列表行可选
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
2)将激活状态的条件添加到选择器文件中:
<item android:state_activated="true" >
<shape android:shape="rectangle">
<gradient android:startColor="#0000ff"/>
3)您需要创建一个自定义适配器来跟踪列表中每个位置的状态,以便在滚动时保持正确的状态。
修改强>
breceivemail的答案更适合您的需求。虽然它可以工作,但对于多重检查的项目类型列表(通过将其更改为CHOICE_MODE_MULTIPLE)可以更好地工作,并且更适合您所需要的工作。
答案 1 :(得分:2)
在其getView()方法中定义自定义适配器:
private int selectedItem;
// is used outside the adapter for example OnItemClickListener
public void setSelectedItem(int position) {
selectedItem = position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//...
// set selected item
LinearLayout activeItem = (LinearLayout) rowView;
if (position == selectedItem)
{
activeItem.setBackgroundResource(R.drawable.background_dark_blue);
}
else
{
activeItem.setBackgroundResource(R.drawable.border02);
}
//...
}
background_dark_blue.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="@color/lightBlue6" />
<!-- border width and color -->
<stroke
android:width="2dp"
android:color="#FF0404B4" />
<padding
android:bottom="2dp"
android:left="2dp"
android:right="2dp"
android:top="2dp" />
</shape></item>
</layer-list>
border02.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle" android:layout_width="wrap_content">
<stroke android:width="0.5dp" android:color="#FF000000" />
<solid android:color="#FFFFFFFF" />
<padding android:left="0dp" android:top="0dp" android:right="0dp"
android:bottom="0dp" />
<corners android:radius="0dp" />
</shape>
</item>
</layer-list>
答案 2 :(得分:1)
“android:listSelector”属性用于在单击时指定项目背景。要突出显示第一个项目或单击后选择的项目,您需要以编程方式执行此操作。
答案 3 :(得分:0)
默认情况下,ListViews没有chioceMode
设置(设置为none
),因此当前选择不会直观显示。使用choiceMode
属性可以使您获得所需的方面。
您也可以查看this solution,也许它也适合您。