Kotlin学习笔记九、Kotlin下常用布局的使用

1、线性布局LinearLayout

Kotlin中线性布局这个View控件在xml布局文件中的使用方式跟Java中的使用就完全一样,没什么特别注意的地方。但是在kotlin代码中的使用相对于Java就有一些不同:

1、Kotlin允许对属性orientation直接赋值,以取代Java中的setOrientation()方法,类似的还有gravity属性取代了setGravity()方法。
2、 Kotlin使用关键字as进行变量类型的强制转换,比如由View转换为Button:(view as button).***
3、Kotlin支持调用dip方法将数值dip直接转换为px,,倘若由Java编码,那么需要开发者自己实现dip与px的转换工具类。不单单如此,Kotlin还提供了sppx, px→dip,px→sp,dip→sp的转换方法。
布局如下:

<LinearLayout
	android:id="@+id/llLinear"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:orientation="horizontal"
	android:background="@color/colorPrimary">
	<TextView
    	android:id="@+id/tvStella"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="Stella"
    	android:padding="5dp"
    	android:background="@color/buttonSolid"
    	android:layout_margin="5dp"/>
	<TextView
    	android:id="@+id/tvXiaoYu"
    	android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:text="晓晓"
    	android:padding="5dp"
    	android:background="@color/buttonSolid"
    	android:layout_margin="5dp"/>
</LinearLayout>

在这里插入图片描述
Kotlin代码如下:

var count = 0;
fun llLinear(){
	llLinear.setOnClickListener {
		var mod = count % 2
		when(mod){
			0->mod0()
			else->mod1()
		}
		count++
	}
}
fun mod0(){
	llLinear.orientation = LinearLayout.HORIZONTAL
	llLinear.gravity = Gravity.LEFT
	var params = llLinear.layoutParams as LinearLayout.LayoutParams
	params.setMargins(dip(5), dip(5), dip(5), dip(5))
	llLinear.layoutParams = params
}
fun mod1(){
	llLinear.orientation = LinearLayout.VERTICAL
	llLinear.gravity = Gravity.CENTER
	var params = llLinear.layoutParams as LinearLayout.LayoutParams
	params.setMargins(dip(10), dip(10), dip(10), dip(10))
	llLinear.layoutParams = params
}

切换效果如下:

在这里插入图片描述
在这里插入图片描述
相应的,在通过Kotlin的代码设置LinearLayout的其他的属性的方式跟上面差不多,开发中可以细细体会。

2、相对布局RelativeLayout:

有了上面LinearLayout的使用经历,大致也能猜到RelativeLayout的使用方式的变化。相对布局内部的视图不依赖于排列规则(水平顺序排列、竖直顺序排列),而是依赖于指定的参照物,这参照物可以是与盖世兔平级的视图,也可以是盖世兔的上级视图(即父View);以及指定当前视图位于参照物的方向;二者相辅相成,确定该View的具体位置。
布局如下:

<RelativeLayout
	android:id="@+id/rlRelative"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:minHeight="50dp"
	android:background="@drawable/main_button_bg"
	android:layout_margin="5dp"
	android:padding="5dp">
</RelativeLayout>

代码如下:

var mView = TextView(this)
mView.text = "可爱的晓晓"
mView.width = dip(120)
mView.height = dip(60)
mView.gravity = Gravity.CENTER
mView.setBackgroundResource(R.drawable.rl_view_bg)
rlRelative.addView(mView)

效果图如下:
在这里插入图片描述
相对布局RelativeLayout因其在方位上的向定规则较多,因此在去之上就比较丰富,比如RelativeLayout.LEFT_OF表示位于至顶视图的左边,RelativeLayoutALIGN_RIGHT表示与指定视图左侧对其,RelativeLayout.CENTER_IN_PARENT表示位于父视图的中央等等。这些位置的指定都是通过Kotlin提供的addRule()方法添加进去的:

rlRelative.addRule(RelativeLayout.ABOVE, 指定的View视图的资源ID)
rlRelative.addRule(RelativeLayout.ALIGN_PARENT_LEFT, 指定视图的资源ID)
…………

但是上面的代码有点冗长了,因此Kotlin利用Anko库对代码调用方式做了优化,以简化开发者调用方法API的难度:

rlRelative.above(指定的View视图的资源ID)
rlRelative.alignParentLeft()
…………

关于Kotlin的Anko库的依赖,见app的gradl.build以及moudle的gradle.build。Anko库提供的其他简化方法如下:
在这里插入图片描述

3、约束布局ConstraintLayout

束布局主要是为了解决传统的线性布局、相对布局等的缺点:多重嵌套,缺乏灵活性,而且嵌套过多导致渲染效率低下。他同事兼顾了灵活性和渲染高效率,是另一种更高级的相对布局。但也存在一个缺点,那就是,控件与控件之间的位置关系都是相互依赖参照的。其中一个控件发生了变化,那么有可能其他的所有控件位置管理立马混乱。

ConstraintLayout布局的几个关于方位控制的参数理解:详见《约束布局ConstraintLayout笔记》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值