Android学习笔记—第四章 Android开发组件2

第四章 Android开发组件2

  1. 列表类组件

    (1)ListView组件:以垂直列表的形式列出需要显示的列表项

    相关属性:

    a. android:divider  用于为列表视图设置分隔条,可以用颜色或者图片资源

    b. android:dividerHeight  设置分隔条的高度

    c. android:entries  通过数组资源为ListView指定列表项

    d. android:footerDividersEnabled  设置是否在footerView之前绘制分隔条,默认为true。

    e. android:headerDividersEnabled  设置是否在headerView之后绘制分隔条,默认为true。

    (2)ListView使用步骤:

    a. 拖入一个ListView控件,高度改为match_parent

    b. 新建一个布局xml文件,设定每行显示的样式

    c. 创建一个类MyAdapter继承BaseAdapter

    getView()方法:设置每行数据显示及每行显示样式

    getCount()方法:显示的行数,当返回值为0时,getView()方法不会被调用,显示为空白

    d. 创建适配器对象

    MyAdapter adapter = new MyAdapter();

    e. 为ListView设置适配器

    listView.setAdapter(adapter);

    (3)ListView的优化

    上下滑动会不断触发getview()方法

    解决方法:复用行布局,减少控件查找

    //创建一个类,声明几个变量(变量类型和数量与布局xml文件中包含的控件一致)

    class ViewHolder{

    View view1;

    View view2;

    ......

    }

    //声明成员变量

    View inflate;

    ViewHolder  holder;

    //优化

    if(convertView==null){

    //创建一个ViewHolder对象

    //得到布局转换器对象

    LayoutInflater inflater = getLayoutInflate();

    //将布局xml文件转换为布局对象

    inflate = inflater.inflate(R.layout.listItem,null);

    //查找控件

    holder.view1 = inflate.findViewById(R.id.view1);

    holder.view2 = inflate.findViewById(R.id.view2);

    //设置一个标签

    infalte.setTag(holder);

    }else{

    //替换、复用行布局

    inflate=convertView;

    holder = (ViewHolder)inflate.getTag();

    }

    //依据控件类型设置控件内容

    ......

    (3)数据更新

    数据发生变化时,由适配器通知listview更新数据

    adapter.notifyDataSetChanged();

    (4)ListView的点击事件

    a. 设置点击监听

    listview.setOnItemClickListener(new OnItemClickListener){

    @Override

    public void onItemClick(AdapterView<?> parent,View view,int position,long id){

    ......

    }

    }

    备注:当行布局中存在抢占焦点的控件时(如Button),ListView的点击会失效

    解决方式:

    在行布局中抢占焦点的控件上设置属性:android:focusable = "false"

    在行布局中设置让所有能抢占焦点的控件都不抢占焦点

    android:descendantFocusability = "blocksDescendants"

    b. 设置长按点击监听

    listview.setOnItemLongClickListener(new OnItemLongClickListener){

    @Override

    public void OnItemLongClick(AdapterView<?> parent,View view,int position,long id){

    ......

    }

    }

  2. Spinner组件:列表选择框相当于网页中的常见的下拉列表框

    getSelectedItem():获取列表选择框的选中值

    OnItemSelectedListener:设置列表项的选中事件监听。

    setDropDownViewResource():为适配器设置列表框下拉时的选项样式

  3. Gallery组件:画廊视图,可按水平方向显示内容,并可用手指直接拖动图片移动,一般用来浏览               图片。通常用BaseAAdapter适配器为Grallery组件提供要显示的图片。
  4. ImageSwitcher组件:图片切换器,用于实现类似于Windows下“Windows照片查看器”中的“上一                      张”、“下一张”的功能。使用ImageSwitcher必须实现                                      ViewSwitcher.ViewFactory接口,通过makeView()方法创建用于显示图片的                      ImageView对象。例如:

    imageSwitcher.setInAnimation(xxx);//设置淡入动画

    imageSwitcher.setOutAnimation(xxx);//设置淡出动画

    imageSwitcher.setFactory(new ViewFactoty(){

    @Override

    public View makeView(){

    ImageView imageView = new ImageView(MainActivity.this);

    return imageView;

    }

    });

    imageSwitcher.setImageResource(xxx);  //设置显示的图片

时间: 2024-12-21 08:02:03

Android学习笔记—第四章 Android开发组件2的相关文章

Android学习笔记(四七):Content Provider初谈和Android联系人信息

Content Provider 在数据处理中,Android通常使用Content Provider的方式.Content Provider使用Uri实例作为句柄的数据封装的,很方便地访问地进行数据的增.删.改.查的操作.Android并不提供所有应用共享的数据存储,采用content Provider,提供简单便捷的接口来保持和获取数据,也可以实现跨应用的数据访问.简单地说,Android通过content Provider从数据的封装中获取信息. Content provider使用Uri

【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖排时,如下图显示: 屏幕上只显示一个fragment,点击列表上的数目,进入到简介的activity.下面介绍实现的方式. 设置横排和竖排的不同排版风格 在 Pro Android学习笔记(四):了解Android资源(下)的“资源和配置的变更”中,我们介绍了如何同资源文件夹名设置不同资源.缺省的l

Android学习笔记(四) Fragment

1.从网上看了许多篇关于Fragment的简要介绍,发现都是相类似的理解,而且都是草草地说与Activity大致相同就了事,都没有说清楚Activity与Fragment的具体的关联与区别,一大堆的rubbish. 在此我也记录下本人的rubbish理解: 关于Fragment的生命周期问题,确实应该是如大多数人所说,与Activity相类似,用法也相类似,但是这并不足以教会我们怎样去使用Fragment. Fragment应该是作为Activity的一部分,更像动态的panel(也许实际上真的

Android学习笔记(四二):SQLite、ListView、ContextMenu

继续上一个例子,结合ListView中对SQLite进行操作. 通过CursorAdapter在ListView中的数据呈现 在上一个例子中,我们可以对SQLite中的数据库进行增删改查,将数据读到游标Cursor中,然后一一读出.在Android中可以通过CursorAdapter直接将数据映射到ListView中,如下处理: public class Chapter22Test1 extends ListActivity{    private SQLiteDatabase  db = nu

Android学习笔记(四三):文件访问

之前我们学习了通过preference和SQLite数据库进行数据存储,也可以通过文件方式.文件可以是在应用打包时预置,也可以是应用所生成. 文件访问有两种方式:一:静态数据的文件可以防止在res/raw中,这些文件是只读的,只有在应用版本升级的时候进行修改,或者我们先读出这些数据,通过 reference的方式来处理,这样以后可以进行修订,但是这种方式,会有两份数据保存.二:另一种方式是通过URL访问文件,动态数据的读取也可以采用SQLite3的方式. res/raw/下静态文件的读取 在re

【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transaction进行切换,很方便提供切换的效果. 利用setTransition() 在Pro Android学习笔记(三九):Fragment(4):基础小例子-续的“Step 4:实现showDetail(int index),如何管理fragment”中,介绍了如何在容器FrameLayout中通过frag

【转】Pro Android学习笔记(四):了解Android资源(下)

处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootname="tom"><--也可以是<root>,本次采用带参数的方式作为实验-->    <leaf>Hello from an elementtest.</leaf>   <leaf>Hello World!</lea

Android学习笔记(四八):提供自己的Content Provider

在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立Content Provider,并通过Uri进行增删改查.如果应用的数据只需自己使用,并不需要content provider,相反避免这样做,可直接访问数据:但是若希望数据可以被其他应用访问,创建content provider就是常规手段. 再谈Content Provider的Uri 在上一次学习中,我们谈到了Uri的格式.现在已cont

Android学习笔记(四十):Preference的使用

Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preference这个键值对的方式来处理这样的情况,自己主动保存这些数据,并立时生效,同一时候Android提供一种类似的layout的方式来进行Prefernce的布局. 一个简单的Preferenece样例 步骤1:编写preference XML,在res/xml/下增加我们的preference XML文件