继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

MogonBook_Android_布局

MahoneAlex
关注TA
已关注
手记 24
粉丝 49
获赞 326

一、Android布局介绍
1.简介
  • Android中所有的UI(用户界面)元素都是使用View和ViewGroup对象建立的
  • View是一个可以将一些信息绘制在屏幕上并与用户产生交互的对象
  • ViewGroup是一个包含多个的View和ViewGroup的容器,用来定义UI布局
  • Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地组合使用它们来完成界面布局,界面元素绘制和用户交互等工作
  • 开发者还可以选择性地继承一些系统提供的View,来自定义View,把自己定义的界面元素显示给用户
  • Android的UI开发使用层次模型来完成,一般都是在一个ViewGroup中嵌套多层ViewGroup,每一层中含有任意数目的View

图片描述

    注意:嵌套层次不要超过10层,否则会大幅降低运行效率,上图为3层
2.AndroidUI的开发分类:
  • 界面布局开发------定义界面布局
  • 控件开发------定义单个界面元素
  • AdapterView与Adapter开发------列表显示
  • UI组件开发------对话框,通知,菜单等
  • 自定义View,图形图像和动画------通过代码,自行绘制界面
3.常用的UI布局:
  • LinearLayout:线性布局
  • RelativeLayout:相对布局
  • FrameLayout:帧布局
  • TableLayout:表格布局
  • AbsoluteLayout:绝对布局
  • GridLayout:网格布局
4.布局定义方式:
  • 定义UI布局的最常用的方法是使用XML布局文件
  • 如同HTML一样,XML为布局提供了一种可读的结构
  • XML中的每个元素都是View或ViewGroup的子孙类的对象
  • 可以把每一个XML布局文件理解为一颗由View和ViewGroup的子孙类对象组成的树
  • 树根是一个ViewGroup对象,所有的叶节点都是View对象,树的分支点都是ViewGroup对象

    注意:Android中ViewGroup可以嵌套包含很多View以及ViewGroup对象,而ViewGroup是View的子类
5.View以及View子类关系图:

图片描述


二、Android UI之屏幕适配器
  • 屏幕尺寸:指屏幕的对角线长度,单位为英寸,1英寸=2.54厘米
  • 屏幕分辨率:水平和垂直方向的像素点的个数,单位是px,1px=1像素点。(一般以垂直像素x水平像素,如1024x768)
  • 屏幕像素密度:指每英寸上的像素点数,单位是dpi。(屏幕像素密度与屏幕尺寸和屏幕分辨率有关)
  • dpi与屏幕尺寸对应关系:

图片描述

图片描述

  • dpi与分辨率:

图片描述

  • 计算公式: dpi=(√(横向分辨率^2+纵向分辨率^2))/屏幕尺寸
  • px:像素点,构成图像的最小单位
  • dip:设备独立像素,也叫密度无关像素,以160dpi为基准,1dip=1px,而240dpi中,1dip=1.5px等等
  • dp:与dip相同
  • sp:专门用于字体的像素单位

图片描述


三、Android UI之线性布局(LinearLayout)
  • LinearLayout,即线性布局,其中的控件会自动按照水平或垂直的方式一次排列
  • 使用android:orientation="vertical" 属性可以指定为垂直
  • 使用android:orientation="horizontal"属性可以指定为水平,默认是水平
  • 其中的控件可以使用android:layout_marginXXX(XXX:Left、Top等)属性设置该控件距离左,上边界的间距如果需要设置控件内部的距离,使用android:layout_paddingXXX(XXX:Left、Top等)属性设置控件内部内容距离控件边缘的距离
  • wrap_content:包裹内容
  • match_parent:匹配父类
  • margin:表示控件距离其他的控件或者屏幕边缘的边距(外边距)
  • padding:表示为控件的内部内容距离控件的边缘的间距(内边距)
  • gravity:表示控件内部的内容的对齐方式
  • layout_gravity:用于设置该View在其父View中的对其方式

    注意:如果线性布局的排布方式为水平,那么layout_gravity在水平方向上就不起作用,只有在垂直方向上有效果,反之则在水平方向上有效果
  • LinearLayout特有的属性:android:layout_weight,他表示比重的意思,可实现半分比布局
  • 如果控件为"match_parent",则layout_weight的值与占用比重是相反关系的,其值越大,它占用的比重越小
  • 如果控件为"wrap_content",则对比重的判断会变为正相关,即其值越小,占用的空间越少

    注意:在一个页面中,有一个有权重的空间和一个无权重的空间,此时系统会先给无权重的控件分配控件,才会得到需要百分比的空间大小来进行百分比的划分,权重只存在于LinearLayout布局中

四、Android UI之相对布局(RelativeLayout)
  • 相对布局中所有的视图组件都是按照相互之间的位置来确定的,需要有一个参照物
  • RelativeLayout中往往需要定义一个控件的资源ID
  • layout_alignXXX表示对齐方式(XXX代表左右上下)
  • layout_marginXXX表示间距
  • layout_centerVertical:垂直居中
  • layout_centerHorizontal:水平居中
  • layout_centerInParent:父类居中
  • layout_alignParentTop:对齐父容器顶部
  • layout_alignParentLeft:对齐父容器左部
  • layout_alignParentRight:对齐父容器右部
  • layout_alignParentBottom:对齐父容器底部

    注意:layout_width和layout _height是在平面图形中不可或缺的两个属性,任何图形需要显示都需要宽和高
  • layout_toRightOf:在某个控件的右方(可以更换方向)
  • layout_alignBottom:底部对齐(可以更换方向)
  • layout_alignBaseline:基准线对齐
  • layout_below:在某个控件的下方

    注意:@+id表示的是系统中本来不存在对应的id值,需要将这个id值添加到系统当中,@id表示从系统中取出已经添加好的id

五、Android UI之表格布局(TableLayout)
  • TableLayout属于行和列形式的管理控件,每行为一个TableRow对象,也可以是一个View对象
  • 在TableRow中还可以继续添加其他的控件,每添加一个子控件就会成为一列,TableLayout不会生成边框
  • TableLayout是继承自LinearLayout
  • TableLayout自身属性如下:

图片描述

图片描述

    注意:TableRow的宽和高可以不指定,系统会自动设置其宽和高

六、Android UI之帧布局(FrameLayout)
  • 帧布局中的每一个组件都代表一个画面
  • 默认以屏幕左上角为(0,0)坐标,按组件定义的先后顺序一次逐屏显示,后面出现的会覆盖前面的画面
  • 用该布局可以实现动画效果

七、Android UI之绝对布局(AbsoluteLayout)
  • AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置
  • 这种布局简单直接,直观性强
  • 使用android:layout_x属性来确定X坐标,以左上角为顶点
  • 使用android:layout_y属性来确定Y坐标,以左上角为顶点
  • 如果子元素不设置layout_x和layout_y,那么他们的默认值是0,会出现在左上角
  • 由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差,不推荐使用

八、Android UI之网格布局(GridLayout)
  • android4.0以上版本出现
  • 可以实现合并行合并列的效果
  • android:columnCount:网格显示几列
  • android:RowCount:网格显示几行
  • android:layout_columnSpan:扩展列的数目
  • android:layout_rowSpan:扩展行的数目
  • android:layout_gravity:填充方式

图片描述

    右边为GridLayout布局处理效果

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP