布局技巧与列表控件
五大布局
FrameLayout(框架布局)、LinearLayout(线性布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、AbsoluteLayout(绝对布局)。
视图的创建
在Android系统中,何的可视化控件都是从android.view.View继承的。开发人员可以使用两种方法来创建视图。
第一种:是使用XML方式来配置View的相关属性,然后装载这些View
第二种:是完全使用java代码来创建View
长度单位
px:表示屏幕实际的象素。
dp(dip):是屏幕的物理尺寸。大小为1英寸的1/72。
sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。
设置表示长度、高度等属性时可以使用dp或sp。但如果设置字体,需要使用sp。
dp是与密度无关,sp除了与密度无关外,还与scale无关
如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换。
布局中常用属性
android:gravity与 android:layout_gravity的区别
android:layout_gravity是指定本元素相对它的父元素的对齐方式。比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置。
android:gravity是指定本元素的子元素相对它的对齐方式。属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置。android:gravity="top"(buttom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal)控制布局中控件的对齐方式。如果是没有子控件的控件设置此属性,表示其内容的对齐方式,比如说TextView里面文字的对齐方式;若是有子控件的控件设置此属性,则表示其子控件的对齐方式,如果需要设置多个属性值,用“|”进行组合
Relativelayout中的相对位置属性
第一类 : 属性值为 true 或 false
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 若找不到兄弟元素以父元素做参照物
第二类:属性值必须为 id 的引用名“ @id/id-name ”
android:layout_below 在某元素的下方
android:layout_above 在某元素的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
第三类:属性值为具体的像素值,如 30dip , 40px
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
无比重要的ListView
1.ListVeiw:用来展示列表的View。
2.适配器:用来把数据映射到ListView上的中介。
3.数据: 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。 SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
ArrayAdapter的 构造需要三个参数,依次为上下文,布局文件,数据源。同时 用setAdapter()完成适配的最后工作。
ListView优化
复用
防止convertView多次加载:
if(converView==null){
converView = mLayoutInflater.inflate(R.layout.xxx.xml,null);
重写ViewHolder
每次在getVIew的时候,都需要重新的findViewById,重新找到控件,然后进行控件的赋值以及事件相应设置。这样其实在做重复的事情,因为的geiview中,其实包含有这些控件,而且这些控件的id还都是一样的,也就是其实只要在view中findViewById一次,后面无需要每次都要findViewById了。
写发的特点,通常有一个内部类classViewHolder,这个ViewHolder,用来标识view中一些控件,方便进行一些事件相应操作的设置,比如onClick等等,这样可以不用每次都要findViewById了,减少了性能的消耗。同时重用了convertView,很大程度上的减少了内存的消耗。
ListView常用属性、方法
属性
Android:listSelector="@android:color/transparent"
属性说明:当item被点击后,改变item的背景颜色(取值范围包括图片),上面设置的是透明的,代表取消android:listSelector的效果,。
android:scrollingCache="false"
android:cacheColorHint="#00000000"
属性说明:当列表数据太多拖动listView时,会发现背景变黑,这是因为listView自带的缓存导致,设置上面的任意一个属性,即可避免这种情况
android:fadingEdge="none"
属性说明:滚动listview时,上边和下边有黑色的阴影,当值为none时代表去掉阴影
android:divider="@drawable/list_diriver_bg"
属性说明:listview item之间的分割线设置(可以是图片,可以是颜色),当值为@null 时代表没有分割线
android:dividerHeight="3dp"
属性说明:listview item之间的分割线高度
android:fastScrollEnabled="true"
属性说明:当listview数据太多时,开启快速滑动,true代表开启
方法
addHeaderView
addFooterView
网友评论