如何更改焦点和点击ListView项目的颜色
我有一个列表查看在我的应用程序(这是XML布局):
<?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/arrayList" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textFilterEnabled="true" android:scrollbars="vertical" android:drawSelectorOnTop="true"> </ListView>
我的列表View中的每个项目都由两个TextView组成:
<?xml version="1.0" encoding="utf-8"?> <TableLayout android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/row_container" android:padding="5px" android:layout_height="wrap_content" android:background="@color/white" android:shrinkColumns="0"> <TableRow> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/ description" android:id="@+id/description" android:textColor="@color/black" android:scrollHorizontally="true" android:singleLine="true"></TextView> </TableRow> <TableRow> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/result" android:textColor="@color/grey" android:maxLines="1" android:scrollHorizontally="true"></TextView> </TableRow> </TableLayout>
我从一个ArrayAdapter中填充我的listView,这样:
public class Matches extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //set layout setContentView(R.layout.list_layout); // obtain reference to listview ListView listView = (ListView) findViewById(R.id.arrayList); ArrayAdapter<Match> arrayAdapter = new ArrayAdapter<Match>( this, R.layout.custom_row, R.id.description, createItems()) { @Override public View getView (int position, View convertView, ViewGroup parent){ Match item = getItem (position); LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.custom_row, null); TextView description = (TextView)rowView.findViewById(R.id.description); TextView result = (TextView)rowView.findViewById(R.id.result); description.setText(item.description + " Risultato: " + item.result ); result.setText(item.date + " " + item.hour); return rowView; } }; listView.setAdapter(arrayAdapter);
我的目标是无论何时select或按下父级,都能够更改这些子视图的文本颜色和背景。
我该怎么做?
在select父行的时候,你的列表行中的子视图应该被认为是被选中的,所以你应该能够在你想改变的视图上设置一个正常状态的可绘制/颜色列表,而不需要麻烦的Java代码。 看到这个SOpost 。
具体来说,您可以将textColor
设置为这样的XML资源:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@color/black" /> <!-- focused --> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed--> <item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed --> <item android:drawable="@color/black" /> <!-- default --> </selector>
在你的main.xml中在你的ListView中包含以下内容:
android:drawSelectorOnTop="false" android:listSelector="@android:color/darker_gray"
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@drawable/YOUR DRAWABLE XML" /> <item android:drawable="@drawable/YOUR DRAWABLE XML" /> </selector>
这里有一篇关于如何使用列表select器的好文章 。
而不是将其设置为ListView的android:背景,我相信你要设置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" />
listview.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, long id) { // TODO Auto-generated method stub parent.getChildAt(position).setBackgroundColor(getResources().getColor(R.color.listlongclick_selection)); return false; } });
很老,但我只是努力,这是我如何解决它在纯XML。 在res / values / colors.xml中,我添加了三种颜色( 颜色_… );
<resources> <color name="black_overlay">#66000000</color> <color name="colour_highlight_grey">#ff666666</color> <color name="colour_dark_blue">#ff000066</color> <color name="colour_dark_green">#ff006600</color> </resources>
在res / drawable文件夹中,我创build了listview_colours.xml ,其中包含;
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/colour_highlight_grey" android:state_pressed="true"/> <item android:drawable="@color/colour_dark_blue" android:state_selected="true"/> <item android:drawable="@color/colour_dark_green" android:state_activated="true"/> <item android:drawable="@color/colour_dark_blue" android:state_focused="true"/> </selector>
在main_activity.xml中findList View并将drawable添加到listSelector ;
<ListView android:id="@+id/menuList" android:layout_width="match_parent" android:layout_height="match_parent" android:listSelector="@drawable/listview_colours" android:background="#ff222222"/> </LinearLayout>
使用listview_colours.xml中的状态_…项来播放你想要的效果。
还有一种方法,你可以设置列表视图的风格,但我从来没有设法得到它的工作