转载

android中LinearLayout中的orientation, gravity, layout_gravity

有时候在android开发的时候, 对gravity, layout_gravity会感到迷茫,特别是新手,所以在此总结一下,gravity, layout_gravity的区别


orientation, gravity, layout_gravity的介绍

orientation : 将容器分成若干个横向或纵向的区域(horizontal则划分成纵向区域),每一个区域中只能有一个View
gravity 若干个区域的排列方式/对齐方式(如,值为left则所有区域从左到右排列)
layout_gravity  每一个区域中只有一个View,layout_gravity决定一个View在其所属区域中的位置


代码:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="First"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="FirstCopyOne"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="FirstCopyTwo"/> </LinearLayout> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second"/> </LinearLayout>


解释:

首先orientation的值为 vectical , 说明将容器分为了一个个的横向区域

gravity的值为center,说明横向区域内的控件对齐方向是居中对齐

子线性布局的layout_gravity的值为center, 说明整个子线性布局占在横向区域的center


参数值失效

对于gravity和layout_gravity这两个关键字,在某些情况下他们的某些值不能使用(失效)
一: orientation="horizontal"
容器被分为若干个纵向区域
对于gravity:区域横向排列,只能指定其横向排列的方式,而与纵向有关的值会失效

比如top和 bottom,center_vertical会失效


对于layout_gravity:在纵向的区域中,只能决定View在该区域的上下位置,所以横向的值将会失效,

如left,right,center_horizontal会失效

二:orientation="vertical"
容器被分为若干个横向区域
对于gravity:区域纵排列,只能指定其纵向排列的方式,而与横向有关的值会失效

比如right和 left,center_horizontal会失效


对于layout_gravity:在横向的区域中,只能决定View在该区域的左右位置

所以纵向的值将会失效,如top,bottom,center_vertical会失效


属性默认值

orientation:默认值为horizontal(横向)
gravity和layout_gravity的默认值为top或lef
t

top和left在orientation去不同值时总会有一个失效,没失效的值就是默认值

正文到此结束
本文目录