AdapterView是一种用来展示大量数据的视图对象,AdapterView的内容一般是包含相同格式资源的控件,查阅Android文档知类的定义:
从上可知AdapterView直接继承ViewGroup,间接继承View,因此它是一个系统组件,使用它,一般是直接使用它的子类,它的常见子类有ListView、Spinner,GridView和Gallery。
查看AdapterView源码注意到,AdapterView类后面跟着泛型。
AdapterView的常用子类介绍:
1.ListView 视图是一个列表,每一项的布局是一个自定义布局,可以使用系统已定义好的布局,合理的组合数据项的布局,可以展示不同类型的数据。
2.Spinner 视图是一个下拉列表,每一项的内容只能是字符串数据,类型可以定义为多种类型。
3.GridView 视图是一个网格,对比ListView来看,ListView是一个多行单列视图,而GridView是一个多行多列视图,它的列数根据实际需求自定义。
4.Gallery 画廊视图,水平方向滑动,多用于展示图片,是一个可以把子项以中心锁定,水平滚动的列表。已经被ScrollView和ViewPicker取代了。
1.ListView的使用:
ListView类的定义:
XML中的常用属性:
android:layout_width;默认一般设置为match_parent或者fill_parent
android:layout_height:默认一般设置为match_parent或者fill_parent
android:layout_weight:根据需要来灵活设置android:layout_width和android:layout_height
android:divider:设置相邻两个水平项之间的分隔条
android:dividerHeight:设置相邻两个水平项之间的分隔条的高度
android:entries:为视图绑定数据源,其中数据源必须是以xml文件定义的
Java文件中常用方法:
示例:
1.数据源是xml文件定义的
1 23 4 Day21_My_ListView 5Settings 6Hello world! 7 89 14 15- 这是ListView的第一条数据项
10- 这是ListView的第二条数据项
11- 这是ListView的第三条数据项
12- 这是ListView的第四条数据项
13
110 11 16 17 18
1 package com.my.day21_my_listview1; 2 3 import com.my.day21_my_listview1.R; 4 5 import android.os.Bundle; 6 import android.app.Activity; 7 8 public class MainActivity extends Activity { 9 10 @Override11 protected void onCreate(Bundle savedInstanceState) {12 super.onCreate(savedInstanceState);13 setContentView(R.layout.activity_main);14 }15 }
2.数据源是动态定义的
1 package com.my.day21_my_listview1; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.my.day21_my_listview1.R; 7 8 import android.os.Bundle; 9 import android.widget.ArrayAdapter;10 import android.widget.ListView;11 import android.app.Activity;12 13 public class MainActivity extends Activity {14 private Listdatas;15 private ListView listView;16 private ArrayAdapter adapter;17 18 @Override19 protected void onCreate(Bundle savedInstanceState) {20 super.onCreate(savedInstanceState);21 setContentView(R.layout.activity_main);22 23 datas = new ArrayList ();24 for(int i=1;i<=4;i++){25 datas.add("这是ListView的第"+i+"条数据项");26 }27 listView = (ListView) findViewById(R.id.listView);28 adapter = new ArrayAdapter (this, android.R.layout.simple_gallery_item, datas);29 listView.setAdapter(adapter);30 }31 }
效果图:
2.Spinner的使用:
Spinner的类定义:
描述:
常用方法:
注:Spinner中的数据也可以以两个方式定义,一种是静态的xml定义,另一种是动态的完成数据源的初始化。
示例:
效果图:
1 package com.my.day21_my_spinner; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.widget.ArrayAdapter; 6 import android.widget.Spinner; 7 8 public class MainActivity extends Activity { 9 private Spinner spinner;10 private String[] datas = {"北京","上海","广州","深圳"};11 private ArrayAdapteradapter;12 13 @Override14 protected void onCreate(Bundle savedInstanceState) {15 super.onCreate(savedInstanceState);16 setContentView(R.layout.activity_main);17 18 spinner = (Spinner) findViewById(R.id.spinner);19 adapter = new ArrayAdapter (this, android.R.layout.simple_spinner_item,datas);20 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);21 spinner.setAdapter(adapter);22 }23 24 }
3.GridView的使用:
以多行多列的形式显示数据,其中多列是定义的。
在xml文件中的重要属性:
示例:
效果图:
110 11 12 20 21 30 31 32 33
1 26 7 14 20 21
1 package com.my.day21_my_gridview2; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 import android.os.Bundle; 9 import android.app.Activity;10 import android.widget.GridView;11 import android.widget.SimpleAdapter;12 13 public class MainActivity extends Activity {14 private GridView gridView;15 16 @Override17 protected void onCreate(Bundle savedInstanceState) {18 super.onCreate(savedInstanceState);19 setContentView(R.layout.activity_main);20 21 gridView = (GridView) findViewById(R.id.gridView);22 23 int[] images = { R.drawable.sample_0, R.drawable.sample_1,24 R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,25 R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };26 27 List
4.Gallery的使用
Gallery的类定义:
Gallery官方文档解释:
示例:
效果图:左右滑动,切换图片
1 package com.my.day21_my_gallery; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 9 import android.os.Bundle;10 import android.widget.Gallery;11 import android.widget.SimpleAdapter;12 import android.app.Activity;13 14 public class MainActivity extends Activity {15 private List> datas;16 private SimpleAdapter adapter;17 private Gallery gallery;18 private int[] images = { R.drawable.sample_0, R.drawable.sample_1,19 R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,20 R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };21 22 List > list = new ArrayList >(); 23 @Override24 protected void onCreate(Bundle savedInstanceState) {25 super.onCreate(savedInstanceState);26 setContentView(R.layout.activity_main);27 28 datas = new ArrayList >();29 for(int i=0;i map = new HashMap ();31 map.put("image", images[i]);32 datas.add(map);33 }34 35 gallery = (Gallery) findViewById(R.id.gallery);36 adapter = new SimpleAdapter(this, datas, R.layout.item_layot, new String[]{"image"}, new int[]{R.id.image});37 gallery.setAdapter(adapter);38 }39 }
总结:综上所述,对于AdapterView这类视图,使用步骤类似,需要根据不同的场景选择合适的展示数据的视图。
未完,待续。