Android开发——通过代码实现布局

2020.7.31

使用情景:之前所有的布局都是在xml配置文件上进行的,xml配置是固定的,在程序还未加载时就已经布局好了,如果我们想在程序运行中更改控件,是做不到的,所以xml配置不灵活,下面将通过代码的形式实现简单的界面布局

通过三种布局方式来实现下图界面

show.png

首先创建容器->承载内容 LinearLayout RelativeLayout ConstraintLayout
以LinearLayout为例

  val container=LinearLayout(this)
  必须传入一个Context->上下文,即在哪个界面上,this指的是当前的MainActivity界面

一.容器(控件)的属性和方法

  1. 容器
  • 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)
  1. ImageView
  • setImageResource(R.drawable.ic_launcher_background):设置图片
    通过R调用资源
  • scaleType:设置填充模式
    对应的值为ImageView.ScaleType中静态属性,具体的属性在控件篇中详讲
  1. TextView
  • gravity:设置文本内容的对齐方式
  • setTextColor:设置文字颜色
  • textSize:设置文字大小,类型是float
  1. 三种布局方式对比
  • LinerLayout->系统会默认根据你设置的orientation进行横向或纵向分条区域添加控件,所以只需要设置控件的大小即可,相对简单
  • RelativeLayout->除了设置控件大小,还得通过LayoutParams的addRule方法添加对齐规则
  • ConstraintLayout->和RativeLayout相似,通过id和添加对齐方式来确定控件的位置,下面是常用属性
    使用方式:对齐方式=对齐的目标控件
    leftToLeft->左边与目标控件的左边对齐
    leftToRight->左边与目标控件的右边对齐
    rightToLeft->右边与目标控件的左边对齐
    rightToRight->右边与目标控件的右边对齐
    ...依次类推其他对齐方式

将容器添加到界面上,使用setContentView(容器对象)方法
将控件添加到容器上,使用容器的addView(控件对象)方法

二.dp转px

在代码中,布局的单位都是px,但不同的屏幕分辨率即屏幕密度不同,所以我们习惯用dp值来统一衡量,因此我们就必须将想设置的dp值转为px值,关于px和dp的叙述在链接中有详解关于dp和px的叙述

  1. 首先得获取手机的屏幕密度值
    resources.displayMetrics.density
  2. 然后用屏幕密度值乘上我们想要的dp值即可
fun dpTopx(dp:Int)=(resources.displayMetrics.density*dp).toInt()

三种布局实现的代码过于长,请自行前往查看
代码链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容