AdapterVIew本身是一个抽象基类,它派生的子类用法十分相似。
Adapter特征:

AdapterView继承了ViewGroup,它本质是容器
Adapter可以包括多个“列表项”,并将多个“列表项”以合适的形式显示出来
AdapterView显示多个“列表项”由Adapter提供,调用AdapterView的setAdapter(adapter)方法设置即可。

GridView网格视图

之前有说过ListView和Adapter,本次要说的是GridView,它和ListView基本相同,区别在于ListView只显示一列,而GridView可以显示多列,当GridView只显示一列的话,那么它相当于ListView。关系图解

GridView常用属性

android:columnWidth   设置列的宽度

android:gravity   设置对齐方式

android:horizontalSpacing  设置各元素之间的水平间距

android:verticalSpacing  设置各元素之间的垂直间距

android:numColumns   设置列数  默认是1

android:stretchMode   设置拉伸模式

GridView的Demo:

MainActivity.java

public class MainActivity extends Activity {GridView gview;ImageView img;//给适配器设置9张系统内置的图片int[] imgs = new int[] { android.R.drawable.ic_btn_speak_now,android.R.drawable.ic_delete,android.R.drawable.ic_dialog_alert,android.R.drawable.ic_dialog_dialer,android.R.drawable.ic_dialog_email,android.R.drawable.ic_lock_idle_alarm,android.R.drawable.ic_input_add,android.R.drawable.ic_media_ff,android.R.drawable.ic_menu_call };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img=(ImageView) findViewById(R.id.img);List<Map<String, Object>> listitems = new ArrayList<Map<String, Object>>();//通过循环把9张图片添加List集合中for (int i = 0; i < imgs.length; i++) {Map<String, Object> map = new HashMap<String, Object>();map.put("image", imgs[i]);listitems.add(map);}//参数3    展示的布局文件//参数4    把参数2集合中的Key值拿出来//参数5    把拿出来的key值放在该空间上展示SimpleAdapter adapter = new SimpleAdapter(this, listitems, R.layout.cell, new String[]{"image"}, new int[]{R.id.image1});gview=(GridView) findViewById(R.id.gv);gview.setAdapter(adapter);//给GridView添加点击监听gview.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {//显示被点击的图片img.setImageResource(imgs[position]);System.out.println("被点击了~~~~~~~~~~~");}});//给GridView选中监听gview.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {//显示被选中的图片img.setImageResource(imgs[position]);System.out.println("被选中了");}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center_horizontal" ><GridView android:id="@+id/gv" android:layout_width="match_parent"android:layout_height="wrap_content"android:numColumns="3"android:gravity="center"android:horizontalSpacing="1pt"android:verticalSpacing="1pt"/><ImageView android:id="@+id/img"android:layout_width="300dp"android:layout_height="300dp"android:layout_gravity="center_horizontal"/></LinearLayout>

cell.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_horizontal"android:padding="2pt">
<ImageViewandroid:id="@+id/image1"android:layout_width="50dp" android:layout_height="50dp" />
</LinearLayout>

效果图:

ExpandableListView可展开的列表组件

ExpandableListView是ListView的子类,它进行的扩展是把列表项分为几组,每个组里又包含多个列表项,在用法上与ListView非常相似,ExpandableListView的列表项由ExpandableListAdapter提供,ExpandableListAdapter也是一个接口,下面是该接口的继承关系图:

上图可以看出,虽然后缀是Adapter但是他的关系只是继承Object而已,但是与Adapter类似,它有三种常用方式

1.扩展BaseExpandableListAdapter实现ExpandableListAdapte

2.使用SimpleExpandableListAdapter将两个List集合

3.使用SimpleCursorTreeAdapter将Cursor中的数据包装成SimpleCursorTreeAdapter

额外支持的XML属性

android:childDivider   指定各组内各子列表项之间的分隔条

android:childIndicator    显示在子列表旁边的Drawalbe对象

android:groupIndicator    显示在组列表项旁边的Drawable对象

组元素表示可折叠的列表项,子元素表示列表项展开后看到的多个子元素项

简单模拟QQ分组样式

MainActivity.java

public class MainActivity extends Activity {private ExpandableListView expan;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);expan=(ExpandableListView) findViewById(R.id.expan);expan.setAdapter(new MyAdapter());}class MyAdapter extends BaseExpandableListAdapter {private String[] armType = new String[] { "德玛西亚", "诺克萨斯", "弗雷尔卓德" };private String[][] arms = new String[][] {{ "盖伦", "奎因", "嘉文四世" },{ "德莱厄斯", "卡特琳娜", "德莱文", "泰隆" },{ "艾希", "努努", "艾尼维亚", "林桑桌", "布隆" } };@Overridepublic int getGroupCount() {return armType.length;}//获取某个分组的孩子们的个数@Overridepublic int getChildrenCount(int groupPosition) {return arms[groupPosition].length;}//获得这个组的元素@Overridepublic Object getGroup(int groupPosition) {return armType[groupPosition];}@Overridepublic Object getChild(int groupPosition, int childPosition) {return arms[groupPosition][childPosition];}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return false;}//每个组的外观怎么显示@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(MainActivity.this);ll.setOrientation(LinearLayout.HORIZONTAL);TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());ll.addView(textView);return ll;}//子列表的外观@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textView = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());textView.setPadding(100, 0, 0, 0);return textView;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn false;}private TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);TextView textView = new TextView(MainActivity.this);textView.setLayoutParams(lp);textView.setPadding(80, 0, 0, 0);return textView;}}
}

activity_main.xml只是定义了ExpandableListView而已,这里就不给出了。

虽然方法比较多,但最重要的是这个4个:

getGroupCount();返回组列表的个数

getGroupView();返回组视图

getChildrenCount();返回子列表的个数

getChildView();返回子视图

效果图:

Spinner下拉列表组件

常用XML属性

android:entries    使用XML数组的形式设置下拉列表显示的项目

android:dropDownHorizontalOffset   设置下拉列表的水平偏移量

android:dropDownVerticalOffset   设置下拉列表的垂直偏移量

android:dropDownWidth   设置下拉列表框的宽度

android:popupBackground   设置下拉列表的背景色

android:prompt    设置该列表选择框的提示信息

默认选择第一个元素,它有设置值的方式,一种是XML文件数组形式,另一种是adapter。

Mainactivity.java

public class MainActivity extends Activity {private Spinner s;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);s=(Spinner) findViewById(R.id.s);ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_multiple_choice, new String[]{"德玛西亚","剑圣偷塔","盲僧抓瞎"});s.setAdapter(adapter);}
}

activity_main.java

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="vertical" ><Spinnerandroid:layout_width="match_parent"android:layout_height="wrap_content"android:entries="@array/lol" /><Spinnerandroid:id="@+id/s"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout>

lol.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><string-array name="lol"><item>提莫</item><item>艾希</item><item>蛮</item><item>易</item><item>信</item></string-array>
</resources>

gallery画廊视图

在API8以上已经过时,原因过度耗费系统资源,推荐使用HorizontalScrollView或者ViewPager,同样HorizontalScrollView图片较多也会OOM,并且只能有一个唯一的子控件,VIewPager滑动的时候会删除没有显示的图片释放资源,并且预加载可能要用到的图片。

下面是HorizontalScrollView的事例:

Mainactivity.java

public class MainActivity extends Activity {HorizontalScrollView hsv;LinearLayout ll;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);hsv = (HorizontalScrollView) findViewById(R.id.hsv);ll = (LinearLayout) findViewById(R.id.ll);int imgs[] = new int[] { android.R.drawable.ic_delete,android.R.drawable.ic_dialog_alert,android.R.drawable.ic_dialog_email,android.R.drawable.ic_dialog_info,android.R.drawable.ic_dialog_map,android.R.drawable.ic_delete,android.R.drawable.ic_dialog_alert,android.R.drawable.ic_dialog_email,android.R.drawable.ic_dialog_info,android.R.drawable.ic_dialog_map,android.R.drawable.ic_delete,android.R.drawable.ic_dialog_alert,android.R.drawable.ic_dialog_email,android.R.drawable.ic_dialog_info,android.R.drawable.ic_dialog_map,android.R.drawable.ic_delete,android.R.drawable.ic_dialog_alert,android.R.drawable.ic_dialog_email,android.R.drawable.ic_dialog_info,android.R.drawable.ic_dialog_map};for (int i = 0; i < imgs.length; i++) {// 创建ImageView 并设置宽高ImageView img = new ImageView(this);// 设置显示的图片img.setBackgroundResource(imgs[i]);ll.addView(img);}}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:orientation="horizontal" ><HorizontalScrollViewandroid:id="@+id/hsv"android:layout_width="match_parent"android:layout_height="wrap_content" ><LinearLayoutandroid:orientation="horizontal"android:id="@+id/ll"android:layout_width="wrap_content"android:layout_height="wrap_content" ></LinearLayout></HorizontalScrollView></LinearLayout>

效果图:

AdapterViewFlipper

AdapterViewFlipper继承了AdapterViewAnimator,它在AdapterView的基础上新增了滑动时的动画。它也会显示Adapter提供多个View组件,但它每次只能显示一个View组件,程序中可通过showPrevious()和showNext()方法控制该组件现实上一个,下一个组件。AdapterViewFlipper可以在多个View切换过程中自动使用渐隐渐现的动画效果,除此之外,还可以调用该组件的startFlipping控制自动播放下一个View组件。

MainActivity.java

public class MainActivity extends Activity {AdapterViewFlipper avf;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);avf = (AdapterViewFlipper) findViewById(R.id.avf);final int image[] = new int[] { android.R.drawable.alert_dark_frame,android.R.drawable.arrow_down_float,android.R.drawable.bottom_bar, android.R.drawable.btn_default,android.R.drawable.btn_dialog };BaseAdapter adapter = new BaseAdapter() {@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//创建ImageViewImageView img = new ImageView(MainActivity.this);img.setImageResource(image[position]);//设置ImageView缩放类型img.setScaleType(ImageView.ScaleType.FIT_XY);//设置ImageView布局参数img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));return img;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic Object getItem(int position) {return image[position];}@Overridepublic int getCount() {return image.length;}};avf.setAdapter(adapter);}public void prev(View view){//设置上一个组件avf.showPrevious();}public void next(View view){//设置下一个组件avf.showNext();}public void auto(View view){//自动播放avf.startFlipping();}
}

activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><AdapterViewFlipperandroid:id="@+id/avf"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentTop="true"android:flipInterval="3000" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:onClick="prev"android:text="上一个" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:onClick="next"android:text="下一个" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:onClick="auto"android:text="自动播放" /></RelativeLayout>

效果图:

StackView堆叠

StackView是AdapterViewAnimator的子类,StackView将会以堆叠方式来显示多个列表项,当拖走StackView中处于顶端的View,下一个View就是显示出来,将上一个View拖进StackView,将使之显示出来。

MainActivity.java

public class MainActivity extends Activity {StackView stack;Button b1, b2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);stack = (StackView) findViewById(R.id.stack);b1 = (Button) findViewById(R.id.prov);b2 = (Button) findViewById(R.id.next);int img[] = new int[] { android.R.drawable.bottom_bar,android.R.drawable.btn_default_small,android.R.drawable.btn_radio, android.R.drawable.toast_frame,android.R.drawable.sym_contact_card,android.R.drawable.stat_sys_speakerphone};List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();for(int i=0;i<img.length;i++){Map<String,Object> map = new HashMap<String, Object>();map.put("image", img[i]);list.add(map);}SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.cell, new String[]{"image"}, new int[]{R.id.image1});stack.setAdapter(adapter);}public void prov(View view){stack.showPrevious();}public void next(View view){stack.showNext();}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><StackViewandroid:id="@+id/stack"android:layout_width="match_parent"android:layout_height="wrap_content" android:background="#00FF00"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" android:paddingTop="300dp"><Buttonandroid:id="@+id/prov"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="prov"android:text="上一个" /><Buttonandroid:id="@+id/next"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:onClick="next"android:text="下一个" /></LinearLayout></LinearLayout>

cell.xml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_horizontal"android:padding="2pt">
<ImageViewandroid:id="@+id/image1"android:layout_width="50dp" android:layout_height="50dp" />
</LinearLayout>

效果图:

总结:

AdapterView开头的都需要有适配器才能显示的视图,如果还有后缀是该控件的功能扩展。

Android AdapterView以及子类相关推荐

  1. android adapter 组件,Android UI - AdapterView 及其子类

    AdapterView AdapterView 是一个抽象类,其派生的子类在用法上十分相似: AdapterView 继承了 ViewGroup: AdapterView 及其子类的继承关系如下: A ...

  2. Android开发自学笔记(Android Studio)—4.4 AdapterView及其子类

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

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

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

  4. UI组件之AdapterView及其子类(一)三种Adapter适配器填充ListView

    AdapterView的内容一般是包含多项相同格式资源的列表,常用的有5种AdapterView的子类: (1)ListView:简单的列表 (2)Spinner:下拉列表,给用户提供选择 (3)Ga ...

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

    http://blog.csdn.net/litianpenghaha/article/details/23270881 AdapterView组件是一组重要的组件,AdapterView本身是一个抽 ...

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

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

  7. 2.5 UI组件-AdapterView及子类(疯狂android学习笔记)

    列表视图(ListView)和ListActivity ①直接使用ListView创建 ②让Activity继承ListActivity(相当于该activity显示的组件为ListView) 提示: ...

  8. Android AdapterView 源码分析以及其相关回收机制的分析

    前言 忽然,发现,网上的公开资料都是教你怎么继承一个baseadapter,然后重写那几个方法,再调用相关view的 setAdpater()方法, 接着,你的item 就显示在手机屏幕上了.很少有人 ...

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

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

最新文章

  1. 中国肠道大会 | 日程及嘉宾
  2. js 乘法除法精度问题
  3. 2021-10-12Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
  4. 使用OpenCV进行相机标定
  5. python--json pickle 模块
  6. linux带宽最小的远程桌面,【图片】linux下哪种远程桌面服务最快?_linux吧_百度贴吧...
  7. 【java笔记】java语言的跨平台性和运行环境
  8. SSM整合(spring mybatis)图书
  9. Golang快速入门
  10. linux各个目录作用详解,linux各个目录作用
  11. 论文阅读笔记|A view-free image stitching network
  12. Win 10 远程桌面连接
  13. 关于抢红包的_面试官让我5分钟内写一个抢红包程序,我和他说了半小时原理!...
  14. [数据库] MariaDB安装及使用
  15. 奖金600万美元的XPRIZE新冠病毒快速检测竞赛决出大奖获得者,以研制快速、大规模、低成本且简单易用的解决方案
  16. 《凯恩斯革命的前世今生》导语集(前三章)
  17. 模型稳定度指标PSI
  18. 播放FLV文件的方法
  19. 如何在公司里体现前端的价值以及提升自己的议价能力
  20. String( ) in String cannot be applied to (java.lang.String)

热门文章

  1. WOW 7.0.3 以上版本 完美反和谐方法
  2. 9年没涨价,上太空……这些树莓派的冷知识你知道多少?
  3. 1.angular html+css+js导航条点击样式修改,加跳转页面
  4. python 老男孩学习视频
  5. 每日一句,每日10词【2】(26天)
  6. 手机导航全球升温 融合化发展成为新趋势
  7. matlab 扩大虚拟内存方法
  8. tcpdump与wireshark
  9. robocraft维护服务器,Robocraft
  10. Python之一行代码解决这个错误:OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。