如何在 android 线性布局中对齐控件

how to align controls in android linear layout

我正在使用 android studio 设计仪表板。现在我面临的问题是我有一个线性布局,我希望每行有 2 个按钮,一个按钮在屏幕左侧,另一个按钮在屏幕右侧。我的xml是这样的:

<LinearLayout style="@style/ActivityBody"
            android:orientation="vertical"


            >

   <LinearLayout android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="60dip"
                android:layout_gravity="left"
                android:layout_marginLeft="20dp"
                >

                <Button
                    android:id="@+id/btnMaterialIssue"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/materialissue"
                    android:text="Material Issue"
                    android:onClick="onGol"

                    android:layout_gravity="left"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

                <Button
                    android:id="@+id/btnWorkCompletion"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/workcompletion"
                    android:text="Work Completion"
                    android:onClick="onGol"
                    android:layout_gravity="right"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </LinearLayout>


 </LinearLayout>

我的样式文件是这样的:

<?xml version="1.0" encoding="utf-8"?>

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>
    <style name="Theme" parent="android:Theme"></style>

       <style name="Theme.D1t" parent="android:style/Theme.Light">
        <item name="android:windowNoTitle">false</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
    <style name="Theme.D1" parent="android:style/Theme.Light">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
    <style name="Theme.tranlucent" parent="android:style/Theme.Translucent">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>

    <style name="Home">
        <item name="android:layout_gravity">center_vertical</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">0</item>
        <item name="android:background">#fff</item>
    </style>

    <style name="HomeText">
        <item name="android:layout_gravity">center_vertical</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_weight">0</item>
        <item name="android:gravity">center_horizontal</item>
        <item name="android:textSize"> 18sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@color/foreground</item>
    </style>

    <style name="TitleBar">
        <item name="android:id">@id/title_container</item>
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">45dip</item>
        <item name="android:orientation">horizontal</item>
        <item name="android:background">@color/title_background</item>
    </style>

    <style name="TitleBarOperation">
        <item name="android:layout_width">45dip</item>
        <item name="android:layout_height">fill_parent</item>
    </style>

    <style name="TitleBarLogo">
        <item name="android:id">@id/title_logo</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">fill_parent</item>
    </style>

    <style name="TitleBarText">
        <item name="android:id">@id/title_text</item>
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_height">fill_parent</item>
        <item name="android:layout_weight">1</item>
        <item name="android:gravity">center_vertical</item>
        <item name="android:textSize">18sp</item>
        <item name="android:paddingLeft">12dip</item>
        <item name="android:paddingRight">12dip</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@color/title_text</item>
        <item name="android:singleLine">true</item>
        <item name="android:ellipsize">end</item>
    </style>

    <style name="TextBody">
        <item name="android:textSize">15sp</item>
        <item name="android:lineSpacingMultiplier">1.1</item>
        <item name="android:textColor">@color/textBody</item>
        <item name="android:textStyle">bold</item>
    </style>

    <style name="ActivityBody">
         <item name="android:layout_width">fill_parent</item>
         <item name="android:layout_height">wrap_content</item>

    </style>
    <style name="DashboardButton">
        <item name="android:layout_gravity">center_vertical</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:gravity">center_horizontal</item>
        <item name="android:drawablePadding">2dp</item>
        <item name="android:textSize">9dp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">#fff</item>
        <item name="android:background">@null</item>
    </style>
</resources

你可以做的是使用相对布局并将它们左右对齐

下面是代码

<RelativeLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="60dip"
    android:layout_gravity="left"
    android:layout_marginLeft="20dp">

    <Button
        android:id="@+id/btnMaterialIssue"
        style="@style/DashboardButton"
        android:drawableTop="@drawable/materialissue"
        android:text="Material Issue"
        android:onClick="onGol"
        android:layout_alignParentRight="true"
        android:layout_gravity="left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnWorkCompletion"
        android:layout_alignParentLeft="true"
        style="@style/DashboardButton"
        android:drawableTop="@drawable/workcompletion"
        android:text="Work Completion"
        android:onClick="onGol"
        android:layout_gravity="right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
  1. 选项: 使用右侧按钮左侧和左侧按钮右侧的边距。

              <LinearLayout android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="60dip"
                android:layout_gravity="left"
                android:layout_marginLeft="20dp"
                >
    
                <Button
                    android:id="@+id/btnMaterialIssue"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/materialissue"
                    android:text="Material Issue"
                    android:onClick="onGol"
    
                    layout_marginRight="20dp"
    
                    android:layout_gravity="left"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
    
                <Button
                    android:id="@+id/btnWorkCompletion"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/workcompletion"
                    android:text="Work Completion"
                    android:onClick="onGol"
    
                    layout_marginLeft="20dp"
    
                    android:layout_gravity="right"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </LinearLayout>
    
  2. 选项: 在按钮之间的中间放置一些东西(另一个视图(线性布局))。

  3. 选项: 尝试玩 layout_weight

    <Button
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:text="New Button"
      android:layout_weight="1"/>
    <LinearLayout
      android:orientation="vertical"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" android:layout_weight="1">
    </LinearLayout>
    <Button
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:text="New Button"
      android:layout_weight="1"/>
    </LinearLayout>
    

你必须使用 android:layout_weight 要使用 layout_weight,您需要将 layout_width 设置为 "0dp"

android:layout_width="0dp"
android:layout_weight="1"


<LinearLayout android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="60dip"
                android:layout_gravity="left"
                android:layout_marginLeft="20dp"
                >

                <Button
                    android:id="@+id/btnMaterialIssue"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/materialissue"
                    android:text="Material Issue"
                    android:onClick="onGol"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content" />

                <Button
                    android:id="@+id/btnWorkCompletion"
                    style="@style/DashboardButton"
                    android:drawableTop="@drawable/workcompletion"
                    android:text="Work Completion"
                    android:onClick="onGol"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content" />
            </LinearLayout>

添加 relativelayout 中的所有 linearlayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="35dp"
    android:orientation="horizontal" >

并在线性布局或按钮中添加 android:layout_alignParentRight="true"

<Button
        android:id="@+id/btnAddExpense"
        android:layout_width="wrap_content"
        android:layout_height="45dp"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="15dp"
        android:background="@drawable/stitch_button"
        android:text="@string/add" />