赞
踩
布局中控件的排列方式。
horizontal : 水平排列
vertical : 竖直排列
简单来说,就是权重,比例。
效果:
屏幕被平均分成了1:2。
这里需要注意的一点是,在设置weight的时候,看情况把width(或height)设置为0dp。
有一点需要特别注意:就是当控件的尺寸设置为wrap_content时,需要特别注意content的长度。
这里第一个TextView的文本长度比第二个要多的多,虽然weight都是1,但是显示出来的效果,并不是1:1分配空间。
文本内容长度越多的,分配到的空间也就越多。
这里就涉及到了计算分配空间的公式:
T1:第一个TextView
T2:第二个TextView
T1宽度与T2宽度都是为:wrap_content的宽度
剩余空间 = (总宽度 - (T1宽度 + T2宽度))/2
T1最终宽度 = T1宽度 + 剩余空间
T2最终宽度 = T2宽度 + 剩余空间
gravity : 布局的属性。假如属性为center,则该布局内的所有控件都将居中。
layout_gravity : 控件的属性。假如属性为bottom,则控件靠底部对其。
这里有一个问题,如果遇到该问题,考虑更换布局。
当 android:orientation=”vertical” 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。 即:left,right,center_horizontal 是生效的。
当android:orientation=”horizontal” 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。 即:top,bottom,center_vertical 是生效的。
此时我们的orientation是horizontal,当我们改变layout_gravity为right时。
紫色背景的TextView并没有像我们预期想象的那样,平行移动到最右,而是移动到最上边。
margin:控件属性,为控件距离布局边界的距离。
margin所有属性:
margin属性测试:
padding:控件属性,控件中的内容距离控件边界的距离。
padding所有属性:
padding属性测试:
注意观察文本TextView的位置!
gravity:设置布局内组件的对其方式。
与LinearLayout的gravity不同的是,在RelativeLayout中两个控件会重合,而LinearLayout的控件会依次排列出来。
ignoreGravity:被该属性选中的组件,将不受gravity的控制。
layout_alignParent:根据父容器来定位。
layout_alignParent所有属性:
layout_alignParent属性测试:
layout_align:根据兄弟组件定位
layout_align所有属性:
layout_align属性测试:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/text1"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#3ac656"
android:layout_centerInParent="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#2358d4"
android:layout_toLeftOf="@id/text1"
android:layout_centerInParent="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#de3210"
android:layout_toRightOf="@id/text1"
android:layout_centerVertical="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#c60d4a"
android:layout_below="@id/text1"
android:layout_centerHorizontal="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#fd3bf4c9"
android:layout_above="@id/text1"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
这里在做一个align_left与align_toLeftOf 的区别。
align_left:将该控件的左边缘与给定ID控件的左边缘对齐(该控件默认位于父布局的上边)。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/text1"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#3ac656"
android:layout_centerInParent="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#2358d4"
android:layout_alignLeft="@id/text1"
/>
</RelativeLayout>
align_toLeftOf :将该控件的右边缘和给定ID的控件的左边缘对齐(默认是位于父布局的顶部)。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<TextView
android:id="@+id/text1"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#3ac656"
android:layout_centerInParent="true"
/>
<TextView
android:layout_width="100dp"
android:layout_height="100dp"
android:text="TextView"
android:textSize="15dp"
android:background="#2358d4"
android:layout_toLeftOf="@id/text1"
/>
</RelativeLayout>
rowCount : 设置行数
columnCount :设置列数
如果只设置这个属性,实践发现并没有什么用。如果想要组件平均分配空间的话,还需要加上layout_rowWeight与layout_columnWeight属性。
有一点值得注意的地方是,如果想变大一整行的比例,则只需要改变该行第一个组件中的rowWeight即可,但是如果想变小一整行的比例饿,则需要改变该行所有组件中的rowWeight。
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="2"
android:columnCount="3"
>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:text="Button"
/>
</GridLayout>
layout_row : 设置行(从0开始计算,意思为0为第1行)
layout_column : 设置列(同理)
layout_rowSpan :横跨几行
layout_columnSpan:横跨几列
需要注意的是,如果想要组件占满横跨的行列,需要加上属性layout_gravity:”fill”。不过有时候又不需要设置emmm,不清楚。
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:rowCount="2"
android:columnCount="3"
>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:layout_columnSpan="2"
android:layout_gravity="fill"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:layout_rowSpan="2"
android:layout_gravity="fill"
/>
<Button
android:text="Button"
android:layout_rowWeight="1"
android:layout_columnWeight="1"
/>
<Button
android:layout_rowWeight="1"
android:layout_columnWeight="1"
android:text="Button"
/>
</GridLayout>
关于 ConstraintLayout 的基本使用方法请参照郭神的博客:
http://blog.csdn.net/guolin_blog/article/details/53122387
(我懒,捂脸捂脸。)
还有两个布局,TableLayout(表格布局)与FrameLayout(帧布局),不过用的很少,这里就不介绍了。(原谅我懒,捂脸捂脸)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。