美文网首页
线性布局(LiearLayout)

线性布局(LiearLayout)

作者: fastcv | 来源:发表于2019-07-03 19:22 被阅读0次

    前言

    根据名字,我们可以大概的猜到,这种布局方式是屏幕垂直或水平方向布局(线性),线性布局在开发中使用最多,具有垂直方向与水平方向的布局方式,通过设置属性“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时,剩余空间则为负数,谁的权重大谁就会减去越多。

    相关文章

      网友评论

          本文标题:线性布局(LiearLayout)

          本文链接:https://www.haomeiwen.com/subject/exzchctx.html