android-UI组件(四):AdapterView及其子类

时间:2022-09-01 12:13:37

http://blog.csdn.net/litianpenghaha/article/details/23270881

AdapterView组件是一组重要的组件,AdapterView本身是一个抽象基类,它派生的子类在用法上十分相似,知识显示界面有些不同,

下面是AdapterView及其子类的继承关系类图:

android-UI组件(四):AdapterView及其子类

从AdapterView派生出的三个子类:AdsListView、AdsSpinner、AdapterViewAnimator,这3个子类依然是抽象的,实际运用时需要它们的子类。

1、ListView(列表视图)和ListActivity:

ListView应用十分广泛,它以垂直列表的形式显示所有的列表项,

创建ListView的两种方法:

(1)直接使用ListView创建;

(2)让Activity继承ListActivity,就是该Activity显示的组件为ListView

注意:ListView、GridView、Spinner、Gallery等AdapterView只是容器,而Adapter负责提供每个“列表项”组件,AdapterView负责采用合适的方式显示这些列表项。

AbsListView的XML属性如下:

android-UI组件(四):AdapterView及其子类
 
ListView提供了如下的XML属性:
android-UI组件(四):AdapterView及其子类
 
如果想对ListView的外观、行为进行定制,就要把ListView作为AdapterView使用,通过Adapter控制每个列表的外观和行为。
 
2、Adapter接口及其实现类:
下面是其关系图:
android-UI组件(四):AdapterView及其子类
Adapter接口派生出了ListAdapter和SpinnerAdapter两个子接口,可以看出,几乎所有的Adapter都继承BaseAdapter。
Adapter常用的实现类如下:
android-UI组件(四):AdapterView及其子类
 
通过ArrayAdapter实现的Adapter很简单,其功能也比较有限,而且它的每个列表都只能是TextView,如果要实现复杂的功能,则可以使用SimpleAdapter。
下面给出SimpleAdapter的一个实例:
android-UI组件(四):AdapterView及其子类
activity_simple.xml如下:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:paddingBottom="@dimen/activity_vertical_margin"
  7. android:paddingLeft="@dimen/activity_horizontal_margin"
  8. android:paddingRight="@dimen/activity_horizontal_margin"
  9. android:paddingTop="@dimen/activity_vertical_margin"
  10. tools:context=".SimpleActivity" >
  11. <ListView
  12. android:id="@+id/mylist"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content" >
  15. </ListView>
  16. </LinearLayout>

simple_item.xml如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="horizontal" >
  6. <ImageView
  7. android:id="@+id/header"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:paddingLeft="10dp" >
  11. </ImageView>
  12. <LinearLayout
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:orientation="vertical" >
  16. <TextView
  17. android:id="@+id/name"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:paddingLeft="10dp"
  21. android:textColor="#f0f"
  22. android:textSize="20sp" >
  23. </TextView>
  24. <TextView
  25. android:id="@+id/desc"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:paddingLeft="10dp"
  29. android:textSize="14sp" >
  30. </TextView>
  31. </LinearLayout>
  32. </LinearLayout>
  1. package com.simpleadapter;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import android.os.Bundle;
  7. import android.app.Activity;
  8. import android.view.Menu;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.AdapterView.OnItemClickListener;
  12. import android.widget.AdapterView.OnItemSelectedListener;
  13. import android.widget.ListView;
  14. import android.widget.SimpleAdapter;
  15. public class SimpleActivity extends Activity {
  16. private String[] names = { "虎头", "弄玉", "李清照", "李白" };
  17. private String[] descs = { "可爱的孩子", "一个擅长音乐的女孩", "一个擅长写词的女性", "一个伟大的浪漫主义诗人" };
  18. private int[] imageIds = new int[] { R.drawable.tiger, R.drawable.nongyu,
  19. R.drawable.qingzhao, R.drawable.libai };
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_simple);
  24. List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
  25. for (int i = 0; i < names.length; ++i) {
  26. Map<String, Object> listItem = new HashMap<String, Object>();
  27. listItem.put("header", imageIds[i]);
  28. listItem.put("name", names[i]);
  29. listItem.put("desc", descs[i]);
  30. listItems.add(listItem);
  31. }
  32. SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
  33. R.layout.simple_item,
  34. new String[] { "name", "header", "desc" }, new int[] {
  35. R.id.name, R.id.header, R.id.desc });
  36. ListView list = (ListView) findViewById(R.id.mylist);
  37. list.setAdapter(simpleAdapter);
  38. // ListView的列表项的单击事件绑定事件监听器
  39. list.setOnItemClickListener(new OnItemClickListener() {
  40. @Override
  41. public void onItemClick(AdapterView<?> parent, View view,
  42. int position, long id) {
  43. System.out.println(names[position] + "被单击了");
  44. }
  45. });
  46. // 为ListView的列表项的选中事件绑定事件监听器
  47. list.setOnItemSelectedListener(new OnItemSelectedListener() {
  48. @Override
  49. public void onItemSelected(AdapterView<?> parent, View view,
  50. int position, long id) {
  51. System.out.println(names[position] + "被选中了");
  52. }
  53. @Override
  54. public void onNothingSelected(AdapterView<?> arg0) {
  55. }
  56. });
  57. }
  58. @Override
  59. public boolean onCreateOptionsMenu(Menu menu) {
  60. // Inflate the menu; this adds items to the action bar if it is present.
  61. getMenuInflater().inflate(R.menu.simple, menu);
  62. return true;
  63. }
  64. }

运行界面如下:

android-UI组件(四):AdapterView及其子类
点击或者选中按钮时在LogCat上面会有显示。
 
3、AutoCompleteTextView(自动完成文本框):
AutoCompleteTextView从EditText派生而来,实际上也是一个文本编辑框,但是它比普通的编辑框多一个功能:当用户输入一定的字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个菜单项之后,AutoCompleteTextView会按照用户的选择自动填写该文本框。
AutoCompleteTextView除了支持EditText的属性方法之外,还支持如下的XML属性以及方法:
android-UI组件(四):AdapterView及其子类
 
AutoCompleteTextView派生一个子类:MultiAutoCompleteTextView,该子类的功能与AutoCompleteTextView基本相似,只是MultiAutoCompleteTextView比AutoCompleteTextView允许输入多个提示项,以分隔符分隔。
 
4、GridView(网格视图):
GridView用于在界面上按行列分布的方式来显示多个组件,GridView和ListView具有相同的父类:AbsListView,因此GridView和ListView很相似,但是ListView只显示一列,GridView可以显示多列
GridView常用的XML属性:
android-UI组件(四):AdapterView及其子类
注意:使用GridView一般都会设置numColumns大于1,否则该默认值为1,则意味着该GridView只有一列,就相当于ListView了。
上表中android:stretchMode属性支持如下属性值:
android-UI组件(四):AdapterView及其子类
 
5、ExpandableListView(可展开的列表组件):
 
ExpandableListView是ListView的子类,它在普通ListView的基础上进行扩展,把应用中的列表项分为几组,每组又可以包含多个列表项,ExpandableListView与普通的ListView用法十分相似,只是
ExpandableListView所显示的列表应该由ExpandableListAdapter提供,下面是其继承关系图:
android-UI组件(四):AdapterView及其子类
实现ExpandableListAdapter的3种常用方式:
android-UI组件(四):AdapterView及其子类
下面显示ExpandableListView支持的XML属性:
android-UI组件(四):AdapterView及其子类
 
6、Spinner:
Spinner组件就是一个列表选择框,这里相当于弹出一个菜单供用户选择。Spinner继承AbsSpinner,AbsSpinner继承AdapterView,因此Spinner表现出ApdaterView的特征,下面显示了Spinner的XML属性:
android-UI组件(四):AdapterView及其子类
注意:上面的android:entries属性并不是Spinner定义的,而是在AbsSpinner中定义的,
 
7、Gallery(画廊视图):
Gallery继承AbsSpinner,且Gallery显示的也是一个列表框,但是Gallery显示的是一个水平的列表框,Spinner显示的是一个垂直的列表框。它们之间的区别还有:Spinner作用是供用户选择,而Gallery则允许用户通过拖动来查看上一个、下一个列表项。
Gallery提供的XML属性:
android-UI组件(四):AdapterView及其子类
注意:android已经不再推荐使用Gallery组件,而是推荐使用其他的水平滚动组件HorizontalScrollView和ViewPager来代替Gallery。
 
8、AdapterViewFipper:
AdapterViewFipper继承AdapterViewAnimator,下面是其支持的XML属性:
android-UI组件(四):AdapterView及其子类
它额外指定的属性:
android-UI组件(四):AdapterView及其子类
 
9、StackView:
StackView也是AdapterViewAnimator的子类,StackView以“堆叠”的方式来显示多个列表项,
StackView提供的两种控制方式:
android-UI组件(四):AdapterView及其子类

android-UI组件(四):AdapterView及其子类的更多相关文章

  1. UI组件之AdapterView及其子类(四)Gallery画廊控件使用

    听说 Gallery如今已经不使用了,API使用ViewPaper取代了,以后再学专研ViewPaper吧如今说说Gallery画廊,就是不停显示图片的意思 Gallery是用来水平滚动的显示一系列项 ...

  2. 第四组UI组件:AdapterView及子类

    AdapterView组件是一组重要的组件,AdapterView本省是一个抽象基类,它派生的子类在用法上十分相似,只是显示界面与一定的区别,因此这次针对它们的共性集中讲解,并突出介绍他们的区别. A ...

  3. 第3组UI组件:AdapterView及其子类

    1 AdapterView类简介 1.1 AdapterView组件是一组重要的组件,AdapterView本身是一个抽线类,实际使用更多的都是Adapter相关子类,AdapterView具有如下特 ...

  4. UI组件之AdapterView及其子类关系,Adapter接口及事实上现类关系

    AdapterView本身是一个抽象基类,它派生的的子类在使用方法上十分类似.AdapterView直接派生的三个子类:AbsListView.AbsSpinner,AdapterViewAnimat ...

  5. UI组件之AdapterView及其子类(五)ListView组件和ListActivity

    ListView组件是一个显示组件,继承AdapterView基类,前面已经介绍了分别使用ArrayAdapter,SimpleAdapter,扩展BaseAdapter来为LisView提供列表项h ...

  6. UI组件之AdapterView及其子类(三)Spinner控件具体解释

    Spinner提供了从一个数据集合中高速选择一项值的办法. 默认情况下Spinner显示的是当前选择的值.点击Spinner会弹出一个包括全部可选值的dropdown菜单或者一个dialog对话框,从 ...

  7. Android UI组件----ListView列表控件详解

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  8. Android 高级UI设计笔记08:Android开发者常用的7款Android UI组件(转载)

    Android开发是目前最热门的移动开发技术之一,随着开发者的不断努力和Android社区的进步,Android开发技术已经日趋成熟,当然,在Android开源社区中也涌现了很多不错的开源UI项目,它 ...

  9. Android开发10&period;1:UI组件适配器AdapterView&lpar;创建ListView&comma;Adapter接口&rpar;

    @version:Android4.3 API18 @author:liuxinming 概述               AdapterView继承了ViewGroup,它的本质是容器       ...

  10. Android开发自学笔记&lpar;Android Studio&rpar;&mdash&semi;4&period;4 AdapterView及其子类

    一.引言       AdapterView本身是一个抽象类,而它派生的子类在用法上也基本相似,只是在显示上有一定区别,因此把他们也归为一类.       AdapterView具有如下特征: Ada ...

随机推荐

  1. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  2. Navisworks 2014 Api 简单的使用

    初次接触Navisworks Api  .NET 的二次开发.主要是研究了一下.关于NavisWorks 结构树的加载. void LoadModel() { //清空当前的结构树信息 treeVie ...

  3. 【转】【收藏】LINQ学习心得分享--------(二)LINQ语法详解

    原地址:http://blog.csdn.net/xuemoyao/article/details/8053444   通过上一章节的学习,相信大家已经掌握了学习LINQ的前期的准备知识.在这一节里, ...

  4. Android Gradle 配置选项合集

    //让gradle 引入构建安卓app的插件 apply plugin: 'com.android.application' //自定义变量, 使用的时候不需要 ext 前缀 ext { minSdk ...

  5. 动画——animation(2)

    日常中,我们使用的动画来源有两个方面—— 第一个,自己去定义. 通过@keyframes去定义即可,格式如下: @keyframe animatename{ 0%{ //这里面写初始的对象的css样式 ...

  6. Android——MaterialDesign之三NavigationView

    NavigationView的使用 这里我们来讲讲在Android5.0之后推出的NavigationView的具体使用方式.和普通的侧拉菜单制作方式一样,首先所有的东西还是都放在一个DrawerLa ...

  7. 构建eureka-server异常ClassNotFoundException&colon; org&period;springframework&period;boot&period;context&period;embedded&period;FilterRegistrationBean

    Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.embedded.FilterRegistr ...

  8. drozer工具的安装与使用:之一安装篇

    本教程针对于Windows平台下drozer的安装与使用   使用该工具需要JDK的支持,所以使用此工具之前请自行安装 JDK(如有问题的请自行百度其他教程,这里就不赘述了)   还需要安卓调试工具a ...

  9. C语言编程中pid&comma; tid以及真实pid的关系(转)

    add by zhj: 下面是我对pid,tgid,ppid的个人理解 对于ubuntu14.04操作系统,可以在/usr/src/linux-headers-4.4.0-31/include/lin ...

  10. 117&period; Populating Next Right Pointers in Each Node II &lpar;Tree&semi; WFS&rpar;

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...