如何按选定的列表项执行此操作。
我尝试将其添加到android:background
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:state_pressed="false"
android:drawable="@color/android_green" />
<item android:state_focused="true"
android:state_pressed="true"
android:drawable="@color/black_alpha" />
<item android:state_focused="false"
android:state_pressed="true"
android:drawable="@color/black_alpha" />
<item android:drawable="@color/white_alpha" />
</selector>
但它不起作用,它会改变整个ListView。
仍然无法正常工作,这是我到目前为止所拥有的
:: listview_background
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:drawable="@color/black_alpha" />
<item android:drawable="@color/white_alpha" />
</selector>
::我的观点正在使用上面的
<ListView android:id="@+id/list" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_below="@+id/round"
android:listSelector="@drawable/listview_background">
</ListView>
问题是black_alpha将应用整个列表,而不仅仅是选定的列表项
答案 0 :(得分:21)
这是关于如何将选择器与列表一起使用的good article。
我认为您不想将其设置为ListView的android:background
,而是要设置android:listSelector
,如下所示:
<ListView android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:divider="@null"
android:dividerHeight="0dip"
android:listSelector="@drawable/list_selector" />
答案 1 :(得分:8)
Jax,你说的是:
问题是black_alpha将应用整个列表,而不仅仅是选定的列表项
我遇到了同样的问题。在玩了一段时间后,我能够通过使用我想要的颜色的3x3 png图像而不是应用颜色来停止将颜色应用于整个列表。因此,出于某种奇怪的原因,如果你使用颜色你会得到奇怪的背景行为,当你使用png时,它工作正常。 :S
这是解决问题的一种方法。
-----另一种方式----------
当我将listView选择器设置为不具有以下任何状态时,我找到了最佳结果:
RES /抽拉/ list_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
</selector>
然后我会处理列表项背景中的所有状态。不在选择器中。我发现我有更多的控制方式。
RES /颜色/ list_item_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="false"
android:state_pressed="false"
android:drawable="@color/list_item_black_translucent" />
<item android:state_pressed="true"
android:drawable="@color/light_green_accent_translucent" />
</selector>
然后这是我的列表项目:
RES /布局/ simple_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingRight="45dip"
android:paddingBottom="2dip"
android:layout_gravity="center_vertical"
android:background="@color/list_item_bg">
<ImageView
android:id="@+id/arrow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dip"
android:src="@drawable/list_item_arrow" />
<TextView
android:id="@+id/simple_list_item_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textSize="12sp"
android:textColor="@color/list_label_color"/>
</LinearLayout>
答案 2 :(得分:3)
我也面临着你的问题,颜色变化适用于整个列表。
但现在它正在为我工作:
我的主页面包含listview(注意到我没有在这里应用listselector):
<ListView
android:id="@+id/controlList" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
而是将listselector应用于getView,它就像告诉特定行(convertView)在其状态发生变化时使用drawable foldable中的listselector.xml,例如紧迫,专注......:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null){
LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.control_list, null);
viewHolder = new ViewHolder();
viewHolder.topText = (TextView) convertView.findViewById(R.id.toptext);
viewHolder.bottomText = (TextView) convertView.findViewById(R.id.bottomtext);
convertView.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) convertView.getTag();
}
//each convertView will be assigned the listselector
convertView.setBackgroundResource(R.drawable.listselector);
viewHolder.topText.setText(testSchemes[position]);
//viewHolder.vText.setText(testDetails[position]);
return convertView;
}
最后我的listselector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false"
android:state_selected="false"
android:drawable="@color/lightgreen" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_pressed="true"
android:drawable="@color/darkgreen" />
<item android:state_selected="true" android:state_pressed="false"
android:drawable="@color/orange" />
</selector>
以上代码的作用如下: 首次加载时的所有条目都是浅绿色。 使用光标向上和向下滚动会突出显示所选的橙色条目。 按一行将其变为深绿色。
答案 3 :(得分:2)
作为评论中提到的巨石,一个有效的解决方案是使用形状而不是颜色(我也突出了整个列表)。这是一个完整的解决方案:
将这两个属性添加到列表视图中:
android:drawSelectorOnTop="true"
android:listSelector="@drawable/my_list_selector"
将my_list_selector.xml添加到drawable文件夹:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#77526F35"/>
</shape>
现在列表项应该在按下状态下显示半透明绿色覆盖。
答案 4 :(得分:0)
我遇到了同样的问题,然后我在项目视图xml中只需要一个简单的行。
android:background="?android:attr/activatedBackgroundIndicator"
查看此帖子:This post可以提供帮助