文章标题

来源:互联网 发布:caffe的test iter 编辑:程序博客网 时间:2024/06/06 06:16

第二章 布局技巧与列表

小技巧 1
1.布局与优化 1
2.比较常用的控件 2
3. GridView 和ScrollView 5

小技巧
原文链接:http://www.jianshu.com/p/0b79b961c7a0
1.不需要的代码删除掉,为了保持代码的整洁性
2.android studio 部分快捷键(win):
Ctrl+N: 快速查找你需要打开的类;
Ctr+lSpace:自动补全或提示功能 ,相当于eclipse中的Ctrl+/;
Ctrl+Q:查看类、函数API的 使用说明;
CTRL + P:查看方法有哪些参数;
ALT + ENTER:显示问题修改方法;
CTRL + Y:删除整行代码;
ALT + Insert:快速构建、重载等;
3.get set生成方式
右键快捷菜单 —Generate
这里写图片描述
4.快速查错
二分法注释掉一部分
5.设置项中 keymap 查看设置快捷键
6.SDK配置与修改
工具图标这里写图片描述
1.布局与优化
1.1五大布局
线性布局(LinearLayout):按照垂直或者水平方向布局的组件。
帧布局(FrameLayout):组件从屏幕左上方布局组件。
表格布局(TableLayout):按照行列方式布局组件。
相对布局(RelativeLayout):相对其它组件的布局方式。
绝对布局(AbsoluteLayout):按照绝对坐标来布局组件。
1.1.1线性布局
属性值有垂直(vertical)和水平(horizontal)两种。
常用的属性:
android:orientation:可以设置布局的方向
android:gravity:用来控制组件的对齐方式
layout_weight:控制各个组件在布局中的相对大小

1.1.2相对布局
相对布局是按照组件之间的相对位置来布局,比如在某个组件的左边,右边,上面和下面等。

1.1.3表格布局
表格布局是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。
表格布局常用的属性如下:
android:collapseColumns:隐藏指定的列
android:shrinkColumns:收缩指定的列以适合屏幕,不会挤出屏幕
android:stretchColumns:尽量把指定的列填充空白部分
android:layout_column:控件放在指定的列
android:layout_span:该控件所跨越的列数

1.1.4绝对布局
绝对布局通过指定子组件的确切X,Y坐标来ist确定组件的位置,在Android2.0 API文档中标明该类已经过期,可以使用FrameLayout或者RelativeLayout来代替。
1.1.5帧布局会覆盖下一层的控件。
1.2布局优化技巧
1.2.1减少布局层次(善于用相对布局减少层次)
1.2.2删除无用布局
1.2.3布局结构要清晰
1.2.4选择合适的布局
1.2.5一些有用的布局属性
布局引用相同部分
重用布局文件
减少视图层级
需要时才加载
1.3推荐工具
Android lint
HierarchyView

2.比较常用的控件
WebView:加载网页
ListView:显示列表
GridView:显示表格式列表
ScrollView:内容可滚动视图
SufaceView:非常重要的绘图容器

2.1 Listview
列表的显示需要三个元素:
a.ListVeiw 用来展示列表的View。
b.适配器 用来把数据映射到ListView上的中介。
c.数据 具体的将被映射的字符串,图片,或者基本组件。

三者之间的关系
这里写图片描述

(Adapter)适配器类型

这里写图片描述

ArrayAdapter(Context context, int textViewResourceId, List objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。
这里写图片描述
使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局vlist.xml。下面做适配,new一个SimpleAdapter参数一次是:this,布局文件(vlist.xml),HashMap的 title 和 info,img。布局文件的组件id,title,info,img。布局文件的各组件分别映射到HashMap的各元素上,完成适配。
这里写图片描述
有时候,列表不光会用来做显示用,我们同样可以在在上面添加按钮。添加按钮首先要写一个有按钮的xml文件,然后自然会想到用上面的方法定义一个适配器,然后将数据映射到布局文件上。但是事实并非这样,因为按钮是无法映射的,即使你成功的用布局文件显示出了按钮也无法添加按钮的响应,这时就要研究一下ListView是如何现实的了,而且必须要重写一个类继承BaseAdapter。
listView在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得到listView的长度(这也是为什么在开始的第一张图特别的标出列表长度),然后根据这个长度,调用getView()逐一绘制每一行。如果你的getCount()返回值是0的话,列表将不显示同样return 1,就只显示一行。系统显示列表时,首先实例化一个适配器(这里将实例化自定义的适配器)。当手动完成适配时,必须手动映射数据,这需要重写getView()方法。系统在绘制列表的每一行的时候将调用此方法。getView()有三个参数,position表示将显示的是第几行,covertView是从布局文件中inflate来的布局。我们用LayoutInflater的方法将定义好的vlist2.xml文件提取成View实例用来显示。然后将xml文件中的各个组件实例化(简单的findViewById()方法)。这样便可以将数据对应到各个组件上了。但是按钮为了响应点击事件,需要为它添加点击监听器,这样就能捕获点击事件。至此一个自定义的listView就完成了,现在让我们回过头从新审视这个过程。系统要绘制ListView了,他首先获得要绘制的这个列表的长度,然后开始绘制第一行,怎么绘制呢?调用getView()函数。在这个函数里面首先获得一个View(实际上是一个ViewGroup),然后再实例并设置各个组件,显示之。好了,绘制完这一行了。那再绘制下一行,直到绘完为止。在实际的运行过程中会发现listView的每一行没有焦点了,这是因为Button抢夺了listView的焦点,只要布局文件中将Button设置为没有焦点就OK了。
2.2如何更新 Listview中的数据
本质上是listview绑定Adapter,Adapter关联List,因此List变化后导致Adapter同步变化;再通过调用adapter.notifyDataSetChanged();方法使得listview界面自动更新。

if (position == 0) {

// 新建另外一批数据
// 替换掉老的数据
// 刷新listview,让它更新自己的视图
mUserInfos.clear();
mUserInfos.add(new UserInfo(“我是新的数据一”, 1892));
mUserInfos.add(new UserInfo(“我是新的数据二”, 2345));
mUserInfos.add(new UserInfo(“我是新的数据三”, 3245));
phoneBookAdapter.refreshData(mUserInfos);
phoneBookAdapter.notifyDataSetChanged();
}
2.3如何优化 Listview
2.3.1重用
这里写图片描述
这里写图片描述
2.3.2 Item不同怎么办?
比如第一项和第二项背景不同,可以使用getItemViewType 方法
2.3.3常用属性
这里写图片描述
3. GridView 和ScrollView
这里写图片描述

0 0
原创粉丝点击