AdapterView是ViewGroup的子类,可包含多个列表项,用于显示一组数据。其addView方法被禁用,数据提供通过适配器对象去完成。下图是AdapterView的继承树:

AdapterResponseEvent 使用 adapterview_GridView


需要说明的是AbsListView和AbsSpinner这两个直接子类的区别是AbsListView显示的列表项被单击时,被单击的列表项不会有啥变化,而AbsSpinner被选中项会特殊显示。

ListView

ListView是Android中最重要的控件之一。ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。ListView是一套视图组件。通常以列表的形式在客户端显示一些列表选项。一个ListView,通常有三个重要的构成部分:ListView控件本身、ListView中的Item界面布局和需要在ListView中显示的数据。
ListView的工作过程:
ListView显示的时候,首先会去调用适配器适配器,适配器去数据源读取数据并根据item布局组织成一个item view对象返回在ListView中显示。关于ListView的用法及示例请点击这里

GridView

GridView是AbsListView的子类,它可以用网格的形式来显示列表项。

属性名

Java方法

作用

ColumWidth

setColumWidth(int)

设置列宽度

Gravity

setGravity(int)

设置对齐方式

horizontalSpacing

setHorizontalSpacing(int)

设置各元素之间的水平间距

verticalSpacing

setVerticalSpacing(int)

设置各元素之间的垂直间距

numColumns

setNumColumns(int)

设置列数

stretchMode

setStretchMode(int)

设置拉伸模式

关于numColumns这个属性,我们用来设置每一行显示的列数,但我们经常会给这个属性设置为自适应,就是能显示几列就显示几列。值为auto_fit。
关于stretchMode这个属性,它的作用是为了界面美观,因为可能我们控件的尺寸不足以填满整个屏幕,就会在一块区域出现空白,是非常影响美观的,这个属性可以帮我们去拉伸控件的尺寸,以及边距等等。使界面看起来更美观。关于值的说明见下表:

属性值

作用

NO_STRETCH

不拉伸

STRETCH_SPACING

仅拉伸元素之间的间距

STRETCH_SPACING_UNIFORM

表格元素本身,元素之间的间距一起拉伸

STRETCH_COLUMN_WIDTH

仅拉伸元素表格本身

下图是GridView的一个效果图:

AdapterResponseEvent 使用 adapterview_GridView_02

代码如下:
activity_main.xml

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/gv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:numColumns="auto_fit"
    android:stretchMode="spacingWidth"
    android:columnWidth="60dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    >
</GridView>

item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:scaleType="fitCenter"
        android:id="@+id/ivImage"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tvName"
        android:layout_gravity="center_horizontal"/>
</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private GridView view;
    private SimpleAdapter adapter;
    private List<HashMap<String,Object>> getData(){
        List<HashMap<String,Object>> list=new ArrayList<HashMap<String,Object>>();
        int[] images={R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e,R.mipmap.f
        ,R.mipmap.g,R.mipmap.h,R.mipmap.i,R.mipmap.j,R.mipmap.k};
        for(int i=0;i<images.length;i++){
            HashMap<String,Object> map=new HashMap<String, Object>();
            map.put("name","动物"+(i+1));
            map.put("image",images[i]);
            list.add(map);
        }
        return list;
    }
    private  void setupView(){
        view= (GridView) findViewById(R.id.gv);
        String[] from={"image","name"};
        int[] to={R.id.ivImage,R.id.tvName};
        //加载适配器
        adapter=new SimpleAdapter(this,getData(),R.layout.item,from,to);
        //设置适配器
        view.setAdapter(adapter);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupView();
    }
}

Spinner

Spinner是AbsSpinner的子类,通常称为下拉列表。其界面主要由两部分构成:内容显示区和下拉提示列表。其核心事件是列表项选中事件。被选中的列表项会在显示区显示。我们通过一个例子来说明它的用法。下图是运行效果图:

AdapterResponseEvent 使用 adapterview_ListView_03


下面是代码实现:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
   >
    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner">
    </Spinner>
</LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
    private Spinner spinner;
    private ArrayAdapter adapter;
    private void setupView(){
        spinner= (Spinner) findViewById(R.id.spinner);
        String[] colors={"赤","橙","黄","绿","青","蓝","紫"};
        adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,colors);
        spinner.setAdapter(adapter);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setupView();
    }
}