Android线性布局和相对布局的详解和区别

版权声明:个人见解,希望可以帮助大家,共同进步. https://blog.csdn.net/weixin_40783315/article/details/83589369

一、线性布局(LinearLayout)

线性布局:线性布局是我们在开发中最常见的布局方式之一,线性布局可以分为水平线性布局和垂直线性布局这两种布局方式

线性布局的属性(决定布局中元素的位置和布局):

android:layout_gravity ( 是本元素相对于父元素的对齐方式 )

android:gravity="bottom|right"(是本元素所有子元素的对齐方式,设置在父元素上,多个值用|隔开)

android:layout_gravity (子元素在父元素的对齐方式,设置在子元素上)

当 android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left(左),right(右),center_horizontal(水平居中) 是生效的。
当 android:orientation="horizontal" 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top(上),bottom(下),center_vertical (垂直居中)是生效的。

android:padding="10dp" (是本元素所有子元素的与父元素边缘的距离,设置在父元素上) 

android:layout_marginLeft="10dp"(子元素与父元素边缘的距离,设置在子元素上)

android:orientation (线性布局以列或行来显示内部子元素)

android:layout_weight ="1"  分配分配权重值

这就是线性布局做出来的效果啦,下边来说一下权重这个东西。

权重:

android:layout_weight="1"通过设置控件的layout_weight属性以控制各个控件在布局中的相对大小,线性布局会根据该控件layout_weight值与其所处布局中所有控件layout_weight值之和的比值为该控件分配占用的区域。

在水平布局的LinearLayout中有4个TxtView,这4个TextView的layout_weight属性值都为1,那么这4个TextView的大小将拉伸到总大小的四分之一。如果layout_weight指为0,控件会按原大小显示,不会被拉伸;对于其余layout_weight属性值大于0的控件,系统将会减去layout_weight属性值为0的控件的宽度或者高度,再用剩余的宽度或高度按相应的比例来分配每一个控件显示的宽度或高度。

权重最基本的用法就是  对线性布局指定方向(水平或垂直)上剩余空间分配的一个规则,先把规定的大小占完,再来按比例分配剩余空间

特殊情况:

首先计算数值,所有控件加起来后可能超过屏幕大小了,这个时候剩余值就应该是负的,此时按权重分配,权重大的分得值比较大,但是负的,这个时候加上原来的值,反而变小

 权重有一个很有用的特点,在一些特殊应用场景,比如有两个控件,一个设置了权重,一个不设置权重,那么这个设置权重的控件会后加载渲染。

以上就是线性布局的介绍和属性啦,接下来说一下相对布局。

二、相对布局(RelativeLayout

相对布局:相对布局也是常用的布局之一,它可以设置某一个控件相对于其他控件的位置,这些位置可以包括上下左右等,因此相较于其他的布局方式而言具有很大的灵活性。

相对布局常用的属性:

第一类:属性值为true或false
  android:layout_centerHrizontal 水平居中
  android:layout_centerVertical 垂直居中
  android:layout_centerInparent 相对于父元素完全居中
  android:layout_alignParentBottom 贴紧父元素的下边缘
  android:layout_alignParentLeft 贴紧父元素的左边缘
  android:layout_alignParentRight 贴紧父元素的右边缘
  android:layout_alignParentTop 贴紧父元素的上边缘
  android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
  第二类:属性值必须为id的引用名“@id/id-name”
  android:layout_below 在某元素的下方
  android:layout_above 在某元素的的上方
  android:layout_toLeftOf 在某元素的左边
  android:layout_toRightOf 在某元素的右边
  android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
  android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
  android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
  android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
  第三类:属性值为具体的像素值,如30dip,40px
  android:layout_marginBottom 离某元素底边缘的距离
  android:layout_marginLeft 离某元素左边缘的距离
  android:layout_marginRight 离某元素右边缘的距离
  android:layout_marginTop 离某元素上边缘的距离

android:gravity  
android:gravity属性是对该view 内容的限定.比如一个button 上面的text.  你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右 

android:layout_gravity 
android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity="right"则button靠右 

android:layout_alignParentRight 
使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。 

android:scaleType: 
android:scaleType是控制图片如何resized/moved来匹对ImageView的size。ImageView.ScaleType / android:scaleType值的意义区别: 

CENTER /center  按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示 

CENTER_CROP / centerCrop  按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) 

CENTER_INSIDE / centerInside  将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽 

FIT_CENTER / fitCenter  把图片按比例扩大/缩小到View的宽度,居中显示 

FIT_END / fitEnd   把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置 

FIT_START / fitStart  把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置 

FIT_XY / fitXY  把图片不按比例扩大/缩小到View的大小显示 

MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。 

 注意:图片文件夹里面的图片命名是不能大写的。

说完这两个布局,咱们再来看看这两个布局的区别。

线性布局(LinearLayout):在该标签下的所有子元素会根据orientation属性的值来决定是按行或者是按列来逐个显示。代码示例如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"   
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent" >  
    
    <Button  
        android:id="@+id/button1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="@string/app_name" />  
   
    <Button  
        android:id="@+id/button2"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="@string/hello_world" />  
   
    <Button  
        android:id="@+id/button3"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:text="@string/test" />  
   
</LinearLayout>

而相对布局,则是根据控件的相对位置而言,比如居于按钮的左侧或者右侧,示例如下:

 <RelativeLayout   
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent">  
        <Button  
            android:id="@+id/button2"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_toRightOf="@id/button1"  
            android:layout_alignTop="@id/button1"  
            android:text="@string/hello_world" />  
   
        <Button  
            android:id="@+id/button1"  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:layout_alignParentLeft="true"  
            android:layout_alignParentTop="true"  
            android:text="@string/app_name" />  
   
    </RelativeLayout>

所以说,线性布局比较适合所有控件都是整齐排列的页面,相对布局比较随意一点,可以按照自己的想法来放置控件的位置。但是相对布局的写起来比较麻烦一点,需要自己考虑好所有控件的的布局。

猜你喜欢

转载自blog.csdn.net/weixin_40783315/article/details/83589369
今日推荐