前言
根据名字,我们可以大概的猜到,这种布局方式是屏幕垂直或水平方向布局(线性),线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式,通过设置属性“android:orientation”控制方向,属性值垂直(vertical)和水平(horizontal),默认水平方向。(结合大佬们的博客总结的,如有侵权,麻烦联系我删除此文章)
属性
除orientation之外还有以下常用属性:
属性 | 说明 |
---|---|
android:gravity | 内部控件对齐方式,常用属性值有center、center_vertical、center_horizontal、top、bottom、left、right等。这里要与android:layout_gravity区分开,layout_gravity是用来设置自身相对于父元素的布局。 |
android:layout_weight | 权重,用来分配当前控件在剩余空间的大小。正常情况下,值越大占据高度或宽度越大。例外的情况,在LineayLayout布局中使用这个属性时需要注意: 当水平方向布局且子控件的宽度为fill_parent或match_parent时,值越小占据宽度越大,垂直方向也一样。 |
weightSum | 用于指定该父类容器的空间分成几份 |
对齐方式
名称 | 效果 |
---|---|
left | 左 |
right | 右 |
center | 中间 |
bottom | 底部 |
center_vertical | 竖直居中 |
center_horizontal | 水平居中 |
center_horizontal | right | 可以组合搭配 |
举例
实现登录界面
我们实现一个登陆界面:
login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:weightSum="4"
android:layout_margin="30dp"
android:layout_height="50dp">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="Account:"
android:layout_height="match_parent" />
<EditText
android:layout_width="0dp"
android:layout_weight="3"
android:hint="请输入账户名"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:weightSum="4"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_height="50dp">
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:text="Password:"
android:layout_height="match_parent" />
<EditText
android:layout_width="0dp"
android:layout_weight="3"
android:hint="请输入密码"
android:layout_height="match_parent" />
</LinearLayout>
<Button
android:layout_width="300dp"
android:text="登录"
android:layout_marginTop="30dp"
android:layout_gravity="center_horizontal"
android:layout_height="50dp" />
</LinearLayout>
示意图:
linearlayout_login.PNG附加
1、权重加上match_parent时的问题
当水平方向布局且子控件的宽度为fill_parent或match_parent时,值越小占据宽度越大,垂直方向也一样。这里出现这种情况主要是因为match_parent或fill_parent引起的,系统先给第一个子控件分配parent_width(剩余空间),再给第二个分配parent_width,即分配了两个parent_width,此时剩余为parent_width-2parent_width=-parent_width,这里主要问题就在这里,剩余控件其实已经为一个负数了。接着,第一个控件占宽度:parent_width(当前已有宽度)+权重1/3(-parent_width)=2/3parent_width;第二个控件占宽度:parent_width+权重2/3(-parent_width)=1/3parent_width,所以当宽度都是match_parent时,剩余空间则为负数,谁的权重大谁就会减去越多。
网友评论