• 【Android程序开发】常用布局--线性布局LinearLayout


    前几个小节的例程中,XML文件用到了LinearLayout布局,它的学名为线性布局。顾名思义,线性布局 像是用一根线把它的内部视图串起来,故而内部视图之间的排列顺序是固定的,要么从左到右排列,要 么从上到下排列。在XML文件中,LinearLayout通过属性android:orientation区分两种方向,其中从左 到右排列叫作水平方向,属性值为horizontal;从上到下排列叫作垂直方向,属性值为vertical。如果LinearLayout标签不指定具体方向,则系统默认该布局为水平方向排列,也就是默认 

    android:orientation="horizontal"

    下面做个实验,让XML文件的根节点挂着两个线性布局,第一个线性布局采取horizontal水平方向,第 二个线性布局采取vertical垂直方向。然后每个线性布局内部各有两个文本视图,通过观察这些文本视图 的排列情况,从而检验线性布局的显示效果。详细的XML文件内容如下所示:

    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2.    android:layout_width="match_parent"
    3.    android:layout_height="match_parent"
    4.    android:orientation="vertical">
    5.    <LinearLayout
    6.        android:layout_width="match_parent"
    7.        android:layout_height="wrap_content"
    8.        android:orientation="horizontal">
    9.        <TextView
    10.            android:layout_width="wrap_content"
    11.            android:layout_height="wrap_content"
    12.            android:text="横排第一个"
    13.            android:textSize="17sp"
    14.            android:textColor="#000000" />
    15.        <TextView
    16.            android:layout_width="wrap_content"
    17.            android:layout_height="wrap_content"
    18.            android:text="横排第二个"
    19.            android:textSize="17sp"
    20.            android:textColor="#000000" />
    21.    LinearLayout>
    22.    <LinearLayout
    23.        android:layout_width="match_parent"
    24.        android:layout_height="wrap_content"
    25.        android:orientation="vertical">
    26.        <TextView
    27.            android:layout_width="wrap_content"
    28.            android:layout_height="wrap_content"
    29.            android:text="竖排第一个"
    30.            android:textSize="17sp"
    31.            android:textColor="#000000" />
    32.        <TextView
    33.            android:layout_width="wrap_content"
    34.            android:layout_height="wrap_content"
    35.            android:text="竖排第二个"
    36.            android:textSize="17sp"
    37.            android:textColor="#000000" />
    38.    LinearLayout>
    39. LinearLayout>

    运行测试App,进入如下图所示的演示页面,可见horizontal为横向排列,vertical为纵向排列,说明android:orientation的方向属性确实奏效了。

    除了方向之外,线性布局还有一个权重概念,所谓权重,指的是线性布局的下级视图各自拥有多大比例 的宽高。比如一块蛋糕分给两个人吃,可能两人平均分,也可能甲分三分之一,乙分三分之二。两人平 均分的话,先把蛋糕切两半,然后甲分到一半,乙分到另一半,此时甲乙的权重比为1:1。甲分三分之 一、乙分三分之二的话,先把蛋糕平均切成三块,然后甲分到一块,乙分到两块,此时甲乙的权重比为

    1:2。就线性布局而言,它自身的尺寸相当于一整块蛋糕,它的下级视图们一起来分这个尺寸蛋糕,有的 视图分得多,有的视图分得少。分多分少全凭每个视图分到了多大的权重,这个权重在XML文件中通过 属性

    android:layout_weight
    

    来表达。

    把线性布局看作蛋糕的话,分蛋糕的甲乙两人就相当于线性布局的下级视图。假设线性布局平均分为左 右两块,则甲视图和乙视图的权重比为1:1,意味着两个下级视图的layout_weight属性都是1。不过视图 有宽高两个方向,系统怎知layout_weight表示哪个方向的权重呢?所以这里有个规定,一旦设置了layout_weight属性值,便要求layout_width填0dp或者layout_height填0dp。如果layout_width填0dp,则layout_weight表示水平方向的权重,下级视图会从左往右分割线性布局;如果layout_height填0dp,则layout_weight表示垂直方向的权重,下级视图会从上往下分割线性布局。 按照左右均分的话,线性布局设置水平方向horizontal,且甲乙两视图的layout_width都填0dp,layout_weight都填1,此时横排的XML片段示例如下:

    1. <LinearLayout
    2.        android:layout_width="match_parent"
    3.        android:layout_height="wrap_content"
    4.        android:orientation="horizontal">
    5.    <TextView
    6.              android:layout_width="0dp"
    7.              android:layout_height="wrap_content"
    8.              android:layout_weight="1"
    9.              android:text="横排第一个"
    10.              android:textSize="17sp"
    11.              android:textColor="#000000" />
    12.    <TextView
    13.              android:layout_width="0dp"
    14.              android:layout_height="wrap_content"
    15.              android:layout_weight="1"
    16.              android:text="横排第二个"
    17.              android:textSize="17sp"
    18.              android:textColor="#000000" />
    19. LinearLayout>

    按照上下均分的话,线性布局设置垂直方向vertical,且甲乙两视图的layout_height都填0dp,

    layout_weight都填1,此时竖排的XML片段示例如下:

    1. <LinearLayout
    2.        android:layout_width="match_parent"
    3.        android:layout_height="wrap_content"
    4.        android:orientation="vertical">
    5.    <TextView
    6.              android:layout_width="wrap_content"
    7.              android:layout_height="0dp"
    8.              android:layout_weight="1"
    9.              android:text="竖排第一个"
    10.              android:textSize="17sp"
    11.              android:textColor="#000000" />
    12.    <TextView
    13.              android:layout_width="wrap_content"
    14.              android:layout_height="0dp"
    15.              android:layout_weight="1"
    16.              android:text="竖排第二个"
    17.              android:textSize="17sp"
    18.              android:textColor="#000000" />
    19. LinearLayout>

    把上面两个片段放到新页面的XML文件,其中第一个是横排区域采用红色背景(色值为ff0000),第二 个是竖排区域采用青色背景(色值为00ffff)。重新运行测试App,打开演示界面如下图所示,可见横 排区域平均分为左右两块,竖排区域平均分为上下两块。

    感谢观看!!!

  • 相关阅读:
    移动app抓包工具——fiddler抓包指南
    【数据聚类】基于粒子群、遗传和差分算法实现数据聚类附matlab代码
    FPGA 20个例程篇:12.千兆网口实现MDIO接口读写
    计算机毕业设计(60)php小程序毕设作品之共享充电桩小程序系统
    【深入理解java虚拟机】 - 类加载器与双亲委派模型
    ModuleNotFoundError: No module named 'XXX'
    【C++天梯计划】1.3 贪心算法(greedy algorithm)
    机器学习 sklearn数据集
    猿创征文|深入剖析多态的实现原理与虚函数指针
    SpringBoot集成Mybatis——基于SpringBoot和Vue的后台管理系统项目系列博客(五)
  • 原文地址:https://blog.csdn.net/qq_64976935/article/details/127397729