Anroid是一种以嵌入式为基础的开放源码操作系统,Android培训第十一讲:系统讲解ListView
4.自定义布局BaseAdapter修改列表颜色
因为通过直接 构造系统的布局来绘制列表方法肯定是有限的,所以我们需要重写绘制方法 ,写一个类去继承BaseAdapter 并实现这个类中的方法,listView在一开始绘制的时候首先会调用getCout()方法得到绘制次数 ,然后会实例化自己定义的BaseAdapter通过getView()方法一层一层绘制ListView,所以我们可以在这里面根据position(当前绘制的ID)来任意的修改绘制的内容,做出好看漂亮的ListView,下面这个例子我通过重写getView修改每个列表的颜色 并且实现用户选中后成高亮状态。
.<?xml version="1.0" encoding="utf-8"?>
13
14 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
15 android:layout_width="fill_parent" android:layout_height="wrap_content">
16 <ImageView android:id="@+id/color_image"
17 android:layout_width="wrap_content" android:layout_height="fill_parent"
18 android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
19 android:adjustViewBounds="true"
20 android:padding="2dip" />
21 <TextView android:id="@+id/color_title"
22 android:layout_width="fill_parent" android:layout_height="wrap_content"
23 android:layout_toRightOf="@+id/color_image"
24 android:layout_alignParentBottom="true"
25 android:layout_alignParentRight="true" android:singleLine="true"
26 android:ellipsize="marquee"
27 android:textSize="15dip" />
28 <TextView android:id="@+id/color_text"
29 android:layout_width="fill_parent" android:layout_height="wrap_content"
30 android:layout_toRightOf="@+id/color_image"
31 android:layout_below="@+id/color_title"
32 android:layout_alignParentBottom="true"
33 android:layout_alignParentRight="true"
34 android:singleLine="true"
35 android:ellipsize="marquee"
36 android:textSize="20dip" />
37 </RelativeLayout>
38
39 public class ColorList extends ListActivity {
40 private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
41 private String[] mListStr = { "亚嵌教育", "男", "25", "北京",
42 "akaedu005@hotmail.com " };
43 ListView mListView = null;
44 MyListAdapter myAdapter = null;
45 @Override
46 protected void onCreate(Bundle savedInstanceState) {
47 mListView = getListView();
48 myAdapter = new MyListAdapter(this);
49 setListAdapter(myAdapter);
50 mListView.setOnItemClickListener(new OnItemClickListener() {
51 @Override
52 public void onItemClick(AdapterView<?> adapterView, View view, int position,
53 long id) {
54 View v=adapterView.getChildAt(position);
55 v.setBackgroundColor(Color.RED);
56 Toast.makeText(ColorList.this,"您选择了" + mListStr[position], Toast.LENGTH_LONG).show();
57 }
58 });
59
60 super.onCreate(savedInstanceState);
61 }
62
63 class MyListAdapter extends BaseAdapter {
64 private int[] colors = new int[] { 0xff626569, 0xff4f5257 };
65 public MyListAdapter(Context context) {
66 mContext = context;
67 }
68
69 public int getCount() {
70 return mListStr.length;
71 }
72
73 @Override
74 public boolean areAllItemsEnabled() {
75 return false;
76 }
77
78 public Object getItem(int position) {
79 return position;
80 }
81
82 public long getItemId(int position) {
83 return position;
84 }
85
86 public View getView(int position, View convertView, ViewGroup parent) {
87 ImageView iamge = null;
88 TextView title = null;
89 TextView text = null;
90 if (convertView == null) {
91 convertView = LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
92 iamge = (ImageView) convertView.findViewById(R.id.color_image);
93 title =(TextView) convertView.findViewById(R.id.color_title);
94 text= (TextView) convertView.findViewById(R.id.color_text);
95 }
96 int colorPos = position % colors.length;
97 convertView.setBackgroundColor(colors[colorPos]);
98 title.setText(mListTitle[position]);
99 text.setText(mListStr[position]);
100 iamge.setImageResource(R.drawable.jay);
101 return convertView;
102 }
103
104 private Context mContext;
105 }
106 }