listview是Android常用的控件,點擊listview item時,默認顯示橘黃色的背景色,而且翻滾時也顯示相應的顏色。這樣往往會跟實際的軟件UI設計風格很不協調。通過對listview背景顏色的設置,從而實現與軟件UI風格相協調。
改變listview背景選項往往采用建立一個xml文件,如listview_bg.xml,裡面定義selector的相關屬性,將文件放著drawable的資源文件當資源文件使用,在listview item配置背景屬性android:background=”@drawable/listview_bg”從而達到改變背景顏色的目的。
可是問題在於android:background=”@drawable/listview_bg”屬性的設置是一個drawable資源文件,就是說listview_bg.xml配置drawable需要對應一個圖片之類的資源文件,可是需求當中往往只需要顏色代碼而不是圖片資源。這個時候需要在listview_bg.xml配置drawable時,通過引用一個顏色的資源文件,即android:drawable=”@color/white”,這樣就不需要引用類似android:drawable=”@drawable/image”這樣的圖片文件了。
以下是相關的代碼文件。
listview_bg.xml(背景色狀態設置)
- <?xml version="1.0" encoding="utf-8" ?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- 沒有焦點時的背景顏色 -->
- <item android:state_window_focused="false"
- android:drawable="@color/unfocused" />
- <!-- 非觸摸模式下獲得焦點並單擊時的背景顏色 -->
- <item android:state_focused="true" android:state_pressed="true"
- android:drawable="@color/pressed" />
- <!--觸摸模式下單擊時的背景顏色 -->
- <item android:state_focused="false" android:state_pressed="true"
- android:drawable="@color/white" />
- <!--選中時的背景顏色 -->
- <item android:state_selected="true" android:drawable="@color/selected" />
- <!--獲得焦點時的背景 顏色-->
- <item android:state_focused="true" android:drawable="@color/focused" />
- </selector>
color.xml(顏色配置文件)
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <color name="white">#ffffffff</color>
- <color name="unfocused">#cccccccc</color>
- <color name="pressed">#fff22fff</color>
- <color name="selected">#fff33fff</color>
- <color name="focused">#ffff44ff</color>
- </resources>
item.xml(listview Item選項布局文件)
view plaincopy to clipboardprint?
- <?xml version="1.0" encoding="utf-8"?>
- <!-- items選項 -->
- <RelativeLayout
- android:id="@+id/RelativeLayout"
- android:layout_width="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:paddingBottom="4dip"
- android:paddingLeft="12dip"
- android:paddingRight="12dip"
- android:background="@drawable/listview_bg"
- >
- <ImageView
- android:paddingTop="22dip"
- android:layout_alignParentRight="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/more_image"
- />
- <TextView
- android:layout_height="wrap_content"
- android:textSize="18dip"
- android:layout_width="fill_parent"
- android:id="@+id/title"
- android:paddingTop="6dip"
- />
- <TextView
- android:text=""
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:layout_below="@+id/title"
- android:id="@+id/date"
- android:paddingRight="20dip"
- />
- </RelativeLayout>
main.xml(listview文件)
-
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <ListView android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:divider="@color/white"
- android:dividerHeight="1dip"
- android:id="@+id/list_items"
- />
- </LinearLayout>
SelectorActivity.java(java源碼文件)
- package com.test.main;
-
- import java.util.ArrayList;
- import java.util.HashMap;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
-
- public class SelectorActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ListView list=(ListView) findViewById(R.id.list_items);
-
- ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
-
- String []title={"Apple","Google","Facebook"};
- String []date={"2-12","5-16","9-12"};
-
- for (int i = 0; i < 3; i++)
-
- {
-
- HashMap<String, Object> map = new HashMap<String, Object>();
-
- map.put("more_image", R.drawable.more);// 圖像資源的ID
-
- map.put("title", title[i]);
-
- map.put("date", date[i]);
-
- listItem.add(map);
-
- }
- // 數據源
- SimpleAdapter listItemAdapter= new SimpleAdapter(SelectorActivity.this, listItem,
- R.layout.item,// ListItem的XML實現
- // 動態數組與ImageItem對應的子項
- new String[] { "more_image", "title", "date" },
- // XML文件裡面的一個ImageView,兩個TextView ID
- new int[] { R.id.more_image, R.id.title,
- R.id.date });
-
- list.setAdapter(listItemAdapter);
-
- }
- }
最後效果圖
圖-1 點擊時的背景顏色
圖-2 翻滾時的背景顏色