AdapterView详解

AdapterView是ViewGroup的子类,可包含多个列表项,用于显示一组数据。其addView方法被禁用,数据提供通过适配器对象去完成。下图是AdapterView的继承树:
这里写图片描述
需要说明的是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方法作用
ColumWidthsetColumWidth(int)设置列宽度
GravitysetGravity(int)设置对齐方式
horizontalSpacingsetHorizontalSpacing(int)设置各元素之间的水平间距
verticalSpacingsetVerticalSpacing(int)设置各元素之间的垂直间距
numColumnssetNumColumns(int)设置列数
stretchModesetStretchMode(int)设置拉伸模式

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

属性值作用
NO_STRETCH不拉伸
STRETCH_SPACING仅拉伸元素之间的间距
STRETCH_SPACING_UNIFORM表格元素本身,元素之间的间距一起拉伸
STRETCH_COLUMN_WIDTH仅拉伸元素表格本身

下图是GridView的一个效果图:

这里写图片描述

代码如下:
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的子类,通常称为下拉列表。其界面主要由两部分构成:内容显示区和下拉提示列表。其核心事件是列表项选中事件。被选中的列表项会在显示区显示。我们通过一个例子来说明它的用法。下图是运行效果图:这里写图片描述
下面是代码实现:
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();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值