Android常用ViewGroup之LinearLayout

LinearLayout -- 线性布局

  • 简介
    线性布局在开发中使用很多,可以用来做垂直方向或水平方向的view布局。
  • 重要属性
- android:orientation 
控制view布局的方向,是必需属性。取值vertical或者horizontal,默认值是horizontal。

- android:gravity
控制内部子View对齐方式,常用取值center、center_vertical、center_horizontal、top
、bottom、left、right等,这个不是线性布局的特有属性,这个是View的通用属性。可以同时取多个使用"|"进行或运算
比如:android:gravity="center_vertical|left" 垂直居中并对齐左边
  • 子View中使用的属性
- android:layout_weight
权重,线性布局子view的特有属性。用来分配线性布局的剩余空间的。使用权重一般要把分配该权重方向的长度设置为零,比如在水平方向分配权重,就把width设置为零。
使用这个属性可以轻松实现例如水平方向两个按钮各占1/2空间的效果,而没有适配问题。

- android:layout_gravity
设置子view在父容器中的显示位置。常用属性值有center、center_vertical、center_horizontal、top、bottom、left、right等
注意center的取值效果,这里并不是表示显示在LinearLayout的中心,当LinearLayout线性方向为垂直方向时,center表示水平居中,但是并不能垂直居中,此时等同于center_horizontal的作用;同样当线性方向为水平方向时,center表示垂直居中,等同于center_vertical

  • 示例
    1、线性布局使用 android:gravity="center"



    


居中效果.jpg

2、子view使用 android:layout_gravity="center"




    


垂直居中.jpg

3、使用layout_weight实现的效果
两边两个TextView宽度一定,中间的空间让另一个TextView占满




    
    

    


权重.jpg
  • 注意

1、线性布局中android:gravity和android:layout_gravity为什么效果不一致?

android:gravity含义是设置当前view的内容在当前view的内部对齐方式。android:layout_gravity属性以layout_开头,只能在子View中使用,表达的含义是子view在父布局中对齐方式。从含义上来讲示例1和示例2相同,但是显示效果是不一样的。
可以这样理解当给线性布局设置android:gravity属性时,会实际产生期望的效果。当在线性布局中子view使用android:layout_gravity时,实际上是对子view所在的水平区域或者垂直区域做对齐处理。

比如线性布局是水平方向,我们设置其填满父布局,xml示例




    

由于线性布局不能自动换行,会一直往水平方向添加view,所以会产生垂直方向的区域,如下图,此时layout_gravity的效果实际是在这个区域里面进行对齐处理


区域.jpg

2、线性布局子View使用layout_weight(权重)的含义

线性布局中每个子view都可以预先设置自己的宽高数据。以示例3讲解,
我先设置左右两边两个TextView的固定的宽高值,中间的宽度设置为0,此时水平方向的剩余空间,线性布局就会根据子view的权重比值来分配,由于我只给中间的view的设置了权重,所以这个权重值无论是什么剩余空间都会全部分配给它。

那如果我希望左右两边的view和中间的view共享剩余的空间,看下面的效果




    
    

    


权重分配效果.jpg

中间红色的TextView变小了,左右两边变大了。
权重属性值生效是在子view已经分配完空间之后,对剩余空间的按照权重的比值进行处理,上面三个view的权重比是1:1:1,所以每个分剩余空间的1/3。

你可能感兴趣的:(Android常用ViewGroup之LinearLayout)