先看運行效果
一 listView屬性詳解
ListView是類似於將一個界面分爲一行一行,如下圖:
注意:listView.getItemAtPosition(int pos)內部調用了adapter.getItem(intposition)方法,而每種適配器返回的類型都是不一樣的:
當SimpleAdapter返回Map<String,Object>
SimpleCursorAdapter返回Cursor;
繼承BaseAdapter返回自己實現的類型;
1 普通屬性
1.android:background="@drawable/bg", listView設置背景色,拖動或者點擊list空白位置的時候發現ListItem都變成黑色。 因爲默認的ListItem背景是透明的,而ListView的背景是固定不變的,所以在滾動條滾動的過程中如果實時地去將當前每個Item的顯示內容跟背景進行混合運算,所以android系統爲了優化這個過程用,就使用了一個叫做android:cacheColorHint的屬性,在黑色主題下默認的顏色值是#191919,所以就出現了剛纔的畫面,有一半是黑色的。
如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint爲你所要的顏色;如果你是用圖片做背景的話,那也只要將android:cacheColorHint指定爲透明(#00000000)就可以了,當然爲了美化是要犧牲一些效率的。
2.android:fadingEdge="none" 去掉上邊和下邊黑色的陰影
3.android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一個圖片資源lsitview的每一項之間需要設置一個圖片做爲間隔
設置Item之間無間隙
android:divider="#00000000"或者在javaCode中如下定義:listView.setDividerHeight(0);
4.android:listSelector="@color/pink" listView item 選中時的顏色。默認爲橙黃底色。
5.android:divider="@drawable/list_driver" 設置分割線的圖片資源, 不想顯示分割線——》android:divider="@android:color/transparent"
6.android:scrollbars="none" setVerticalScrollBarEnabled(true); 隱藏listView的滾動條
7.android:fadeScrollbars="true" 設置爲true就可以實現滾動條的自動隱藏和顯示
8.android:transcriptMode="alwaysScroll" 用ListView或者其它顯示大量Items的控件實時跟蹤或者查看信息,希望最新的條目可以自動滾動到可視範圍內。通過設置的控件transcriptMode屬性可以將Android平臺的控件(支持ScrollBar)自動滑動到最底部。
android:fastScrollEnabled="false"
android:fastScrollEnabled= "true" 加快滑動速度
android:drawSelectorOnTop="false"
android:scrollingCache="false"
android:drawSelectorOnTop="true"點擊某一條記錄,顏色會顯示在最上面,記錄上的文字被遮住,所以點擊文字不放,文字就看不到
android:drawSelectorOnTop="false"點擊某條記錄不放,顏色會在記錄的後面,成爲背景色,但是記錄內容的文字是可見的
Whenset to true, the selector will be drawn over the selected item. Otherwise theselector is drawn behind the selected item. The default value is false.
2 特別的屬性
1stackFromBottom屬性,這隻該屬性之後你做好的列表就會顯示你列表的最下面,值爲true和false
android:stackFromBottom="true"
2 transciptMode屬性,需要用ListView或者其它顯示大量Items的控件實時跟蹤或者查看信息,並且希望最新的條目可以自動滾動到可視範圍內。通過設置的控件transcriptMode屬性可以將Android平臺的控件(支持ScrollBar)自動滑動到最底部。
android:transcriptMode="alwaysScroll"
3 cacheColorHint屬性,很多人希望能夠改變一下它的背景,使他能夠符合整體的UI設計,改變背景背很簡單隻需要準備一張圖片然後指定屬性 android:background="@drawable/bg",不過不要高興地太早,當你這麼做以後,發現背景是變了,但是當你拖動,或者點擊list空白位置的時候發現ListItem都變成黑色的了,破壞了整體效果。
如果你只是換背景的顏色的話,可以直接指定android:cacheColorHint爲你所要的顏色,如果你是用圖片做背景的話,那也只要將android:cacheColorHint指定爲透明(#00000000)就可以了
4divider屬性,該屬性作用是每一項之間需要設置一個圖片做爲間隔,或是去掉item之間的分割線
android:divider="@drawable/list_driver" 其中 @drawable/list_driver 是一個圖片資源,如果不想顯示分割線則只要設置爲android:divider="@drawable/@null" 就可以了
5fadingEdge屬性,上邊和下邊有黑色的陰影
android:fadingEdge="none" 設置後沒有陰影了~
第五scrollbars屬性,作用是隱藏listView的滾動條,
android:scrollbars="none"與setVerticalScrollBarEnabled(true);的效果是一樣的,不活動的時候隱藏,活動的時候也隱藏
第六fadeScrollbars屬性,android:fadeScrollbars="true" 配置ListView佈局的時候,設置這個屬性爲true就可以實現滾動條的自動隱藏和顯示。
二 ArrayAdapter
Adapter是適配器的意思,在Android中大量的使用到了ListView,而ListView需要與各種適配器結合才能夠使用。不同的場合使用不同的適配器適配器的作用是數據和視圖之間的橋樑。
Adapter有很多種,有ArrayAdapter<T>,BaseAdapter,CursorAdapter,HeaderViewListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapter.
ArrayAdapter數組適配器,數據的數據類型是String類型的,數據的數據類型還可以是其他的包括對象類型。
ArrayAdapter<String> arrayAdapter= new ArrayAdapter<String>(
ArrayListDemo.this,android.R.layout.simple_list_item_1,
adapterData);
這段代碼是創建一個數組適配器的代碼,裏面有三個參數,第一個參數是上下文,就是當前的Activity, 第二個參數是android sdk中自己內置的一個佈局,它裏面只有一個TextView,這個參數是表明我們數組中每一條數據的佈局是這個view,就是將每一條數據都顯示在這個view上面;第三個參數就是我們要顯示的數據。listView會根據這三個參數,遍歷adapterData裏面的每一條數據,讀出一條,顯示到第二個參數對應的佈局中,這樣就形成了我們看到的listView.
實例1 數據類型爲String
佈局文件
<?xml version="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="cnblogs--花郎" />
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
activity
package com.loulijun.demo14;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class Demo13Activity extendsActivity {
private ListView lv;
private ArrayList<String> list = new ArrayList<String>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listview);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_expandable_list_item_1,
getData());
lv.setAdapter(adapter);
}
private ArrayList<String> getData()
{
list.add("180平米的房子");
list.add("一個勤勞漂亮的老婆");
list.add("一輛寶馬");
list.add("一個強壯且永不生病的身體");
list.add("一個喜歡的事業");
return list;
}
}
實例2 數據類型是對象類型
ArrayAdapter爲什麼可以處理對象類型的數據呢?其實,ArrayAdapter是使用數組中對象的toString()方法來填充指定的TextView,所以我們可以通過重寫對象的toString()方法來自定義ListView的顯示。
activity代碼:
List<Person> persons=newArrayList<Person>();
Person person=new Person("張三",20,"1001");
persons.add(person);
person=new Person("李四",21,"1002");
persons.add(person);
person=new Person("王二",22,"1003");
persons.add(person);
ArrayAdapter arrayAdapter3=newArrayAdapter(this,android.R.layout.simple_list_item_1,persons);
listView3.setAdapter(arrayAdapter3);
Person實體類
package com.shandong.mm.entity;
import java.io.Serializable;
/**
* Created by 安卓無憂on 2016/7/27.
*/
public class Person implementsSerializable{
private String name;
private int age;
private String code;
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
private String first_letter;
private int _id;
public void set_id(int _id) {
this._id = _id;
}
public int get_id() {
return _id;
}
public void setFirst_letter(String first_letter) {
this.first_letter = first_letter;
}
public String getFirst_letter() {
return first_letter;
}
public Person(){
}
public Person(String name, int age, String code){
this.name=name;
this.age=age;
this.code=code;
}
public Person(String name,String sex, int age, String code){
this.name=name;
this.age=age;
this.code=code;
this.sex=sex;
}
@Override
public String toString() {
return name +""+age+" "+code;
}
public void setAge(int age) {
this.age = age;
}
public void setCode(String code) {
this.code = code;
}
public void setName(String name) {
this.name = name;
}
publicint getAge() {
return age;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
Demo下載
本人微博:honey_11
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:源碼下載,源碼例子文檔一網打盡。