Android - LinearLayout

Posted 小柴的回忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android - LinearLayout相关的知识,希望对你有一定的参考价值。

android - LinearLayout


小柴的笔记

LinearLayout是Android最常用布局之一,由于布局比较简单,先说属性,不懂的小朋友再看代码解释

一、常用属性

属性作用
android:orientation布局排列方向
android:gravity该组件的对齐方式
android:weight权重,子控件按权重比例分配宽/高
android:background控件的背景
android:width控件的宽度
android:height控件的高度
android:idID,作为资源的名称,被Java文件中引用的唯一标识

1.android:orientation

  • android:orientation=“horizontal” 水平方向排序子组件
  • android:orientation=“vertical” 垂直方向排序子组件

2.android:gravity

设置控件内容位于控件大小的对齐方式
默认位于左上角

  • android:gravity=“center”               居中

  • android:gravity=“center_horizontal”   水平居中

  • android:gravity=“center_vertical”     垂直居中

  • android:gravity=“right”              居右

  • android:gravity=“start”              居右

  • android:gravity=“end”              居左

  • android:gravity=“left”                     居左

  • android:gravity=“bottom”           居下

  • android:gravity=“top”              居上
    以及他们的组合(只列一种,其余一样)

  • android:gravity=“top|end”          右上

3.android:background

背景有三种设置方式(LinearLayout控件和子控件都可以设置)

  • android:background="@color/teal_200"    背景颜色,颜色表存放再color.xml文件中
  • android:background="#777777"           背景颜色,16进制RGB数据
  • android:background="@drawable/abc"    背景图片,图片存放再drawable

4.android:width

  • android:width=“match_parent”         填充父类最大的宽度
  • android:width=“wrap_content”         自适应大小
  • android:width=“xxdp”                 固定大小

5.android:height

  • android:height=“match_parent”         填充父类最大的高度
  • android:height=“wrap_content”         自适应大小
  • android:height=“xxdp”                 固定大小

6.android:weight

  • android:weight=“number” number为任意整数

设置权重,分配剩余空间,若多个设置了,就按比例分配
当控件的宽设置为wrap_content时
只有一个设置了weight时,该控件就会分配所有剩余空间

3个都设置了android:weigh="1"时,三个控件会平分剩余空间
当1:2:3时,会按比例分配剩余空间,第一个分配1/6、第二个分配2/6、第三个分配3/6

当3个控件的宽设置为match_parent时(布局时垂直布局)
3个控件的权重比是1:2:3
每一个控件的大小都是1个match,那么,剩余空间就等于 1-3 = -2 (单位:match_parent)
所以三个控件的大小分别为:
第一个控件的大小为:1 + (-2) * 1/6 = 2/3(单位:match_parent)
第二个控件大小为 1+ (-2) * 2/6 = 1/3(单位:match_parent)
第三个控件大小为1 + (-3) * 3/6 = 0(单位:match_parent)
第一个显示三分之二个屏幕,第二个显示三分之一的屏幕,第三个为0,不显示

二、代码demo

1.android:weight

当宽度为wrap_content,只有一个控件设置weight
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:layout_width="wrap_content"
        android:text="第一控件"
        android:layout_height="100dp"/>
    <TextView
        android:background="@color/purple_200"
        android:layout_width="wrap_content"
        android:text="第二控件"
        android:layout_height="100dp"/>
    <TextView
        android:background="@color/teal_200"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_weight="1"/>
</LinearLayout>

当宽度为wrap_content,全部控件设置weight
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_weight="1"/>
    <TextView
        android:background="@color/purple_200"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_weight="1"/>
    <TextView
        android:background="@color/teal_200"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_weight="1"/>
</LinearLayout>

当宽度为match_parent,全部控件设置weight的值相同
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:layout_width="match_parent"
        android:text="第一控件"
        android:layout_height="100dp"
        android:layout_weight="1"/>
    <TextView
        android:background="@color/purple_200"
        android:layout_width="match_parent"
        android:text="第二控件"
        android:layout_height="100dp"
        android:layout_weight="1"/>
    <TextView
        android:background="@color/teal_200"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:text="第三控件"
        android:layout_weight="1"/>
</LinearLayout>

当宽度为match_parent,控件设置weight的值为1:2:3
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:layout_width="match_parent"
        android:text="第一控件"
        android:layout_height="100dp"
        android:layout_weight="1"/>
    <TextView
        android:background="@color/purple_200"
        android:layout_width="match_parent"
        android:text="第二控件"
        android:layout_height="100dp"
        android:layout_weight="2"/>
    <TextView
        android:background="@color/teal_200"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:text="第三控件"
        android:layout_weight="3"/>
</LinearLayout>

2.android:orientation=“horizontal”

用于LinearLayout标签内

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="第一个"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="第二个"/>
</LinearLayout>

3. android:orientation=“vertical”

用于LinearLayout标签内

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <TextView
        android:background="@color/teal_200"
        android:gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="第一个"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="第二个"/>
</LinearLayout>

4.android:gravity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:background="@color/teal_200"
        android:gravity="center"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="居中"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="center_horizontal"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="水平居中"/>
    <TextView
        android:background="@color/teal_200"
        android:gravity="center_vertical"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="垂直居中"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="right"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="居右"/>
    <TextView
        android:background="@color/teal_200"
        android:gravity="left"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="居左"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="top"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="居上"/>
    <TextView
        android:background="@color/teal_200"
        android:gravity="bottom"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="居下"/>
    <TextView
        android:background="@color/purple_200"
        android:gravity="top|end"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:text="右上角"/>

</LinearLayout>

5.android:background

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:background="@color/teal_700"
    tools:context=".MainActivity">
    <TextView
        android:background="@drawable/picture"
        android:layout_width="match_parent"
        android:text="第一控件"
        android:layout_height="100dp"
        android:layout_weight="1以上是关于Android - LinearLayout的主要内容,如果未能解决你的问题,请参考以下文章

android 开发布局:如何在屏幕下方显示一排按钮

LinearLayout中的weight属性的计算

Android布局权重是怎样的

Android线性布局(LinearLayout)最全解析

Android LinearLayout:在 LinearLayout 周围添加带阴影的边框

Android - LinearLayout