2020.7.31
使用情景:之前所有的布局都是在xml配置文件上进行的,xml配置是固定的,在程序还未加载时就已经布局好了,如果我们想在程序运行中更改控件,是做不到的,所以xml配置不灵活,下面将通过代码的形式实现简单的界面布局
通过三种布局方式来实现下图界面
首先创建容器->承载内容 LinearLayout RelativeLayout ConstraintLayout
以LinearLayout为例
val container=LinearLayout(this)
必须传入一个Context->上下文,即在哪个界面上,this指的是当前的MainActivity界面
一.容器(控件)的属性和方法
- 容器
- layoutParams:设置容器(控件)的宽高
用法:layoutParams=具体布局方式.LayoutParams(width,height)
①具体布局方式.LayoutParams.MATCH_PARENT->静态属性
②给固定值->特别注意:此时的固定值的单位都是px:像素 - setMargins(left,top,right,bottom)设置四周与父容器的边距
- addRule(RelativeLayout.对齐方式 , 对齐的控件)
LayoutParams类的成员方法,添加对齐规则 - marginStart/End/Top/Bottom:设置左右上下在对齐规则下的外边距
- orientation:设置横向或者纵向排列
LinearLayout.HORIZONTAL:横向
LinearLayout.VERTICAL:纵向 - id:设置id值,在相对布局和约束布局中会用到
- background:设置背景颜色(常用)
background=getDrawable(R.color.colorPrimaryDark)
- ImageView
- setImageResource(R.drawable.ic_launcher_background):设置图片
通过R调用资源 - scaleType:设置填充模式
对应的值为ImageView.ScaleType中静态属性,具体的属性在控件篇中详讲
- TextView
- gravity:设置文本内容的对齐方式
- setTextColor:设置文字颜色
- textSize:设置文字大小,类型是float
- 三种布局方式对比
- LinerLayout->系统会默认根据你设置的orientation进行横向或纵向分条区域添加控件,所以只需要设置控件的大小即可,相对简单
- RelativeLayout->除了设置控件大小,还得通过LayoutParams的addRule方法添加对齐规则
-
ConstraintLayout->和RativeLayout相似,通过id和添加对齐方式来确定控件的位置,下面是常用属性
使用方式:对齐方式=对齐的目标控件
leftToLeft->左边与目标控件的左边对齐
leftToRight->左边与目标控件的右边对齐
rightToLeft->右边与目标控件的左边对齐
rightToRight->右边与目标控件的右边对齐
...依次类推其他对齐方式
将容器添加到界面上,使用setContentView(容器对象)方法
将控件添加到容器上,使用容器的addView(控件对象)方法
二.dp转px
在代码中,布局的单位都是px,但不同的屏幕分辨率即屏幕密度不同,所以我们习惯用dp值来统一衡量,因此我们就必须将想设置的dp值转为px值,关于px和dp的叙述在链接中有详解关于dp和px的叙述
- 首先得获取手机的屏幕密度值
resources.displayMetrics.density - 然后用屏幕密度值乘上我们想要的dp值即可
fun dpTopx(dp:Int)=(resources.displayMetrics.density*dp).toInt()
三种布局实现的代码过于长,请自行前往查看
代码链接