📜  Android UI 布局(1)

📅  最后修改于: 2023-12-03 15:29:21.367000             🧑  作者: Mango

Android UI 布局

概述

在Android应用中,UI布局是应用程序的核心部分之一。在设计Android应用的UI布局时,我们通常会用到XML文件来实现。在Android中,UI布局主要涉及到两个组件:View和ViewGroup。View是用来展示UI元素的基本单元,而ViewGroup则是用来对View进行组合的容器。

基本布局
LinearLayout

LinearLayout是最基本,也是最常用的布局。它可以将子View以垂直或水平方向进行排列,并且支持子View的权重分配,从而实现灵活的布局效果。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>
RelativeLayout

RelativeLayout是另一个常用的布局。相较于LinearLayout,RelativeLayout允许子View相对于父View或其他兄弟View进行定位,从而实现更加灵活的布局效果。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/button_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="LEFT" />

    <Button
        android:id="@+id/button_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="RIGHT"
        android:layout_toRightOf="@id/button_left"
        android:layout_marginLeft="10dp" />

</RelativeLayout>
ConstraintLayout

ConstraintLayout是Android Studio 2.2及其以上版本中新增的布局。它通过设置视图之间的约束关系,实现更加灵活和复杂的UI布局,而无需嵌套过多的布局层级。

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/button_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="LEFT"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <Button
        android:id="@+id/button_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="RIGHT"
        app:layout_constraintLeft_toRightOf="@id/button_left"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_margin="10dp"/>

</android.support.constraint.ConstraintLayout>
高级布局技巧
Include和Merge

当我们的XML布局文件比较大时,为了提高布局文件的重用性,我们可以使用标签将一个布局文件中的部分代码包含到另一个布局文件中。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include
        layout="@layout/layout_toolbar"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>

标签可以将布局文件中的多个View合并为一个,从而减少布局文件中的层级关系,提高性能。

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

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is a text"/>

</merge>
PercentRelativeLayout和PercentFrameLayout

PercentRelativeLayout和PercentFrameLayout是Android Support Library中新增的两个布局。它们可以通过设置子View的百分比值来实现更加灵活的布局效果。这种布局方式是很适合移动设备的。

<android.support.percent.PercentRelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/view1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#FF0000"
        app:layout_widthPercent="50%"
        app:layout_heightPercent="50%"
        app:layout_marginTopPercent="25%"
        app:layout_marginLeftPercent="25%"/>

</android.support.percent.PercentRelativeLayout>
<android.support.percent.PercentFrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:src="@drawable/image"
        app:layout_widthPercent="50%"
        app:layout_heightPercent="50%"
        app:layout_marginTopPercent="25%"
        app:layout_marginLeftPercent="25%"/>

</android.support.percent.PercentFrameLayout>
GridLayout

GridLayout是一个灵活的布局,可以实现高度复杂的布局效果。GridLayout将子View分成几个单元格,并且允许设置每个单元格的大小和位置。

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2"
    android:rowCount="3">

    <Button
        android:layout_column="0"
        android:layout_row="0"
        android:text="Button 1"/>

    <TextView
        android:layout_column="1"
        android:layout_row="1"
        android:text="TextView 1"/>

    <Button
        android:layout_column="0"
        android:layout_row="2"
        android:text="Button 2"/>

    <TextView
        android:layout_column="1"
        android:layout_row="0"
        android:text="TextView 2"/>

</GridLayout>
结论

Android UI布局是构建Android应用UI的基础。在设计UI布局时,我们可以利用LinearLayout、RelativeLayout、ConstraintLayout以及其他高级布局技巧来实现各种丰富的交互效果,提升用户体验。