将ListView中的select从橙色更改为绿色

我如何为每个选定的列表项目执行此操作。

我试着把这个添加到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将应用整个列表,而不仅仅是选定的列表项目

Solutions Collecting From Web of "将ListView中的select从橙色更改为绿色"

这里有一篇关于如何使用列表select器的好文章 。

而不是将其设置为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" /> 

贾克斯,你说:

问题是black_alpha将应用整个列表,而不仅仅是选定的列表项目

我有同样的问题。 玩了一段时间之后,我能够通过使用我想要的颜色的3×3 PNG图像而不是应用颜色来停止将颜色应用于整个列表。 所以,如果你使用某种颜色,出于某种奇怪的原因,你会得到奇怪的背景行为,当你使用PNG时,它可以正常工作。 :S

所以这是解决这个问题的一种方法。

– – -其他方式 – – – – –

我find了最好的结果,当我设置listViewselect器不具有像这样的任何状态:

RES /抽拉/ list_selector.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> </selector> 

然后,我在列表项目的背景下照顾所有的州。 不在select器中。 我发现我有更多的控制这种方式。

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> 

我也遇到了颜色变化适用于整个列表的问题。

但现在它为我工作:

我的主页面包含listview(注意我没有在这里应用listselector):

  <ListView android:id="@+id/controlList" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

取而代之的是将listselector应用于getView,就像告诉特定的行(convertView) ,当其状态发生变化时,使用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> 

这就是上面的代码所做的:第一次加载的所有条目都是浅绿色的。 使用光标上下滚动可突出显示选定的条目橙色。 按一排将其变成深绿色。

作为一个评论中提到的大石头,一个工作解决scheme是使用一个形状,而不是一个颜色(我也得到整个列表突出显示)。 这是一个完整的解决scheme:

将这2个属性添加到列表视图中:

 android:drawSelectorOnTop="true" android:listSelector="@drawable/my_list_selector" 

添加my_list_selector.xml到可绘制的文件夹:

 <?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> 

现在列表项目应该显示按下状态的半透明绿色覆盖。

我面临同样的问题,然后我只需要在我的项目视图XML中一个简单的线。

  android:background="?android:attr/activatedBackgroundIndicator" 

检查这个职位: 这个职位可以帮助