一、           自定义控件

1.         引入布局

多个活动需要相同的布局时,使用引入布局的方式来实现代码复用。

activity_main.xlm中加入<include layout=”@layout/title”>

2.         创建自定义控件

如果引入的布局要求能够响应事件且功能都相同,为了避免为这些控件单独编写事件注册代码,最好采用自定义控件。
step1:新建自定义控件的类(TitleLayout)。

使用LayoutInflater实现动态加载布局:

LayoutInflater.from(context).inflate(R.layout.title,this);        // from()方法构建LayoutInflater对象; inflate()方法的第一个参数是要加载的布局的id,第二个参数是给加载好的布局添加父布局。

step2:重写构造方法,为控件注册事件。

step3:在布局文件activity_main.xlm中添加自定义控件,添加自定义控件时要指明控件的完整类名。

<com.sprd.uilayouttest.TitleLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"
/>

二、          
ListView

1.        
Adapter

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:

Android中所有的Adapter一览:

由图可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter等。


BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性。


ArrayAdapter支持泛型操作,最为简单,只能展示一行字。


SimpleAdapter有最好的扩充性,可以自定义出各种效果。


SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

2.        
ListView的简单用法

step1:布局中加入ListView

step2:使用Adapter传递数据,建立ListView与数据的关联

ArrayAdapter<String>
adapter = new ArrayAdapter<String>(

MainActivity.this,android.R.layout.simple_list_item_1,data);

ListView listView =
(ListView) findViewById(R.id.list_view);

listView.setAdapter(adapter);

android.R.layout.simple_list_item_1作为ListView子项的布局的id,是Android内置的布局文件,里面只有一个TextView。

setAdapter()传入构建好的适配器对象。

3.        
定制ListView的界面

step1:定义ListView适配器适配的实体类。

step2:为ListView的子项指定一个自定义的布局。

step3:创建自定义适配器。

getView(int position, View convertView, ViewGroup parent)方法:每个子项被滚动到屏幕内的时候会被调用,在getView()方法中,首先通过getItem()方法得到当前项的Fruit实例,然后使用LayoutInflater来为这个子项。加载我们传入的布局。

4.        
提升ListView的运行效率

缓存布局:使用getView()的convertView缓存布局。

缓存控件的实例:新增内部类ViewHolder缓存控件的实例,然后调用View的setTag()方法将ViewHolder对象存储在View中。


Android学习_7/27的更多相关文章

  1. 我的android学习经历27

    前几天忙着学校的互联网+项目比赛,没有时间学习android和发一些东西,主要是这两天太累了,我是项目组长,好多东西去弄,今天已经交稿去进行初赛. 马上收拾收拾心情,继续我的andorid菜鸟之路 加 ...

  2. android学习笔记27——Activity

    Activity配置==> android应用程序要求所有的应用程序组件都需要进行显示配置后,才可正常使用.包括:Activity.Service.BroadCastReceiver.Conte ...

  3. Android学习笔记27:网格视图GridView的使用

    网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...

  4. Android学习笔记(27):日历视图Calendar

    日历视图CalendarView可用于显示和选择日期. 能够调用setOnDateChangedListener()方法绑定事件监听器. 经常使用XML属性和相关方法: XML属性 相关方法 说明 a ...

  5. Android学习_7/26

    四种基本布局 1. 线性布局(LinearLayout) android:layout_gravity:指定控件在布局中的对齐方式 android:gravity:指定文字在控件中的对齐方式 andr ...

  6. Android学习_7/25

     常用控件 Android控件使用规律:先定义id,再指定宽度和高度,然后适当加入一些控件特有的属性 1.         TextView 在界面上显示一段文本 2.         Button ...

  7. Android学习_7/24

    一.           活动的生命周期 1.        活动状态 运行:位于返回栈栈顶 暂停:不在栈顶,但仍可见 停止:不在栈顶,完全不可见 销毁:从栈中移除 2.        活动的生存期 ...

  8. Android学习_7/23

    1.        在活动中使用Menu 1)        什么是Menu? 2)        怎么实现? step1:res目录下创建Menu resource file,使用<item… ...

  9. Android学习_7/22

    一.Android项目目录结构 1.         AndroidManifest.xml:整个Android项目的配置,注册各组件 <activity android:name=" ...

随机推荐

  1. winfrom 界面时间动态加载

    Timer time1 = new Timer(); private void time1_Tick(object sender, EventArgs e) { lTime.Text = DateTi ...

  2. C# List.sort排序(多权重,升序降序)

    很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...

  3. 数值或者电话号码被EXCEL转成了科学计数法,用XSSFCell 如何读取

    public static Map<String, Integer> readXls() throws IOException { //用来获取每一个小号重复多次,被多少账号用了.来平均 ...

  4. React高阶组件学习笔记

    高阶函数的基本概念: 函数可以作为参数被传递,函数可以作为函数值输出. 高阶组件基本概念: 高阶组件就说接受一个组件作为参数,并返回一个新组件的函数. 为什么需要高阶组件 多个组件都需要某个相同的功能 ...

  5. 编译程序遇到问题 relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;

    编译程序遇到问题  relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; 发现编译 ...

  6. ES6入门四:对象字面量扩展与字符串模板字面量

    简洁属性与简洁方法 计算属性名与[[prototype]] super对象(暂时保留解析) 模板字面量(模板字符串) 一.简洁属性与简洁方法 ES6中为了不断优化代码,减低代码的耦合度在语法上下了很大 ...

  7. javascript中 visibility和display区别在哪

    差异: 1.占用的空间不同. 可见性占用域空间,而显示不占用. 可见性和显示可以隐藏页面,例如: 将元素显示属性设置为block将在该元素后换行. 将元素显示属性设置为inline将消除元素换行. 将 ...

  8. Raspberrypi 安装完MySQL之后登录不了(ERROR 1698 (28000))

    1.问题原因: 出现这是错误是因为 mysql 默认的 root 用户使用了 UNIX auth_socket_plugin 的用户认证方式,我们有下面两种方式处理问题: 修改 root 用户认证方式 ...

  9. Django静态资源配置

    Settings文件设置 INSTALLED_APPS 设置 确保 django.contrib.staticfiles 添加到INSTALLED_APPS中 默认是已经添加上的 INSTALLED_ ...

  10. (十)全志R18 Tina平台关闭所有串口打印的方法

    全志R18 Tina平台关闭所有打印输出方法: 有些国外的产品安全认证,如亚马逊Alexa认证,认证机构会不停地点pcb上的点,看有没有东西输出,有的话就通过这些口想办法破解设备,所以安全认证会要求设 ...