一个好看又丰富的界面由许多控件组成,但是如果没有按照一定的顺序去摆放就会让界面乱糟糟的,为了让界面有序,需要借助布局来实现。布局是一种可用于放置很多控件的容器,它可以按照一定的规律调整内部控件的位置,从而让界面变得有序和精美。布局的内部不单单可以放置控件,还可以放置布局,通过多层布局的嵌套,我们就能完成一些比较复杂的界面实现。下面的图可以很好的展示他们之间的关系。

android 线性布局时怎样让图片靠左 安卓 线性布局_xml

线性布局(LinearLayout)

线性布局是一种非常常用的布局。正如它的名字所描述的一样,这个布局会将它所包含的控件在线性方向上依次排列。线性排列有肯定不止一种方向,有水平也有垂直方向。我们可以通过指定属性android:orientation来实现水平或者垂直方向排列。下面通过在activity_main文件中编写代码来实现。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:text="按钮1"
        android:layout_height="wrap_content"/>
    <Button
        android:layout_width="wrap_content"
        android:text="按钮2"
        android:layout_height="wrap_content"/>
</LinearLayout>

效果图:

android 线性布局时怎样让图片靠左 安卓 线性布局_android_02


可以当我们看到不添加属性android:orientation和添加属性android:orientatinotallow='‘horizontal’'都是水平方向排列。

当我们设置属性值为vertical时,重新运行下程序

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />
</LinearLayout>

效果图:

android 线性布局时怎样让图片靠左 安卓 线性布局_xml_03


注意:如何LinearLayout的排列方向为horizontal,内部的控件就绝不能将宽度设置为match_parent,因为这样的话,会导致单个控件就会将整个水平方向占满,其他控件就没有可放置的位置了。同样,如果排列方向是vertical,内部的控件高度就不能设置为match_parent。

接下来看android:layout_gravity属性,这个属性用于指定控件在布局中的对齐方式,但需注意的是,当LinearLayout的排列方式是horizontal时只有,垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向的长度都会改变,因而无法指定该方向上的对齐方式。同样的道理,当LinearLayout的排列方向是vertical时,只有水平方向上的控件才会生效。在activity_main.xml文件书写以下代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_gravity=""
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <Button
        android:layout_gravity="top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:layout_gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

    <Button
        android:layout_gravity="bottom"
        android:text="按钮3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

运行程序:

android 线性布局时怎样让图片靠左 安卓 线性布局_xml_04


接上来我们学习下LinearLayout中的另一个重要属性——android:layout_weight。这个属性允许我们使用比例的方式来指定控件的大小,它在手机屏幕的适配性方面可以起到非常重要的作用。比如我们正在编写一个消息发送界面,需要一个文本编辑框和一个发送按钮,修改activity_main.xml的代码,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_gravity=""
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <Button
        android:layout_gravity="top"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="按钮1" />

    <EditText
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="发送"
        android:layout_height="wrap_content"/>

</LinearLayout>

效果图:

android 线性布局时怎样让图片靠左 安卓 线性布局_xml_05


你会发现EditText和Button的宽度都指定成了0dp,这样文本编辑框和按钮还能显示出来吗?不用担心,由于我们使用了android:layout_weight属性,此时控件的宽度不应该由android:layout_width来决定,这里指定成0dp是一种比较规范的写法。在EditText和Button都将android:layout_weight属性值设为1,这表示两者平分宽度。为什么会这样呢?其实原理也很简单,系统会把LinearLayout下所有控件的android:layout_weight属性值相加,得到一个总值,然后每个控件占大小的比例就是用该控件android:layout_weight属性值除以刚才算出来的总值。