如何将线性布局与垂直中心对齐?

问题描述 投票:0回答:8

我正在尝试对齐 LinearLayout 的垂直中心,显示下图(天色边框)以删除按钮的垂直中心。

所以我将 id:groupNumbers 的重力设置为 center_vertical。

但没有改变。

如何将 id:groupNumbers 与按钮中心对齐?

enter image description here

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

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

    <LinearLayout
            android:id="@+id/groupNumbers"
            android:orientation="horizontal"
            android:gravity="center_vertical"
            android:layout_weight="0.7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

        <LinearLayout
                android:orientation="horizontal"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            <TextView
                    android:id="@+id/txtSelected01"
                    android:text="00"
                    android:textSize="30dp"
                    android:gravity="center_horizontal"
                    android:layout_weight="1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
        </LinearLayout>

        <LinearLayout
                android:orientation="horizontal"
                android:layout_weight="1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            <TextView
                    android:id="@+id/txtSelected02"
                    android:text="00"
                    android:textSize="30dp"
                    android:gravity="center_horizontal"
                    android:layout_weight="1"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"/>
        </LinearLayout>
    </LinearLayout>


    <Button
            android:id="@+id/btn_deleteNum"
            android:text="Delete"
            android:textSize="20dp"
            android:layout_weight="0.2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
</LinearLayout>
android android-layout
8个回答
199
投票

改变方向和重力

<LinearLayout
    android:id="@+id/groupNumbers"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:layout_weight="0.7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

android:orientation="vertical"
android:layout_gravity="center_vertical"

您正在添加orientation:horizontal,因此布局将包含单个水平行中的所有元素。这不允许您将元素置于中心。


39
投票

使用

android:layout_gravity
代替
android:gravity

android:gravity
设置其所使用的视图内容的重力。
android:layout_gravity
设置视图或布局在其父级中的重力。


11
投票

使用

layout_gravity
而不是
gravity
layout_gravity
告诉父级它应该放置在哪里,
gravity
告诉它的子级它们应该放置在哪里。

<LinearLayout
    android:id="@+id/groupNumbers"
    android:orientation="horizontal"
    android:layout_gravity="center_vertical"
    android:layout_weight="0.7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

8
投票

对我来说,我已经在父级中使用

android:layout_centerVertical="true"
解决了问题
RelativeLayout
:

<RelativeLayout ... >

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

</RelativeLayout>

4
投票

对于出现在中心的框(水平和垂直),我让它仅与一个 LinearLayout 配合使用。 Viswanath L 的回答非常有帮助

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/layout_bg" android:gravity="center" android:orientation="vertical" android:padding="20dp"> <TextView android:id="@+id/dialog_header" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:padding="10dp" android:text="Error" android:textColor="#000" /> <TextView android:id="@+id/message_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:padding="10dp" android:text="Error-Message" android:textColor="#000" /> <Button android:id="@+id/dialogButtonOK" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/message_text" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="Ok" /> </LinearLayout>
    

1
投票
在LinearLayout中使用RelativeLayout

示例:

<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:text="Status"/> </RelativeLayout> </LinearLayout>
    

0
投票
对父 LinearLayout 使用

android:weightSum

 属性并赋予值 3。然后在子 LinearLayout 中分别使用 
android:layout_weight
 2 和 1。然后在 First Chil LinearLayout 中使用 
android:layout_gravity="center_vertical"
。如以下代码所示

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="3" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" android:layout_gravity="center_vertical" android:orientation="horizontal"> <TextView android:id="@+id/status_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="00" android:textColor="@color/red" android:textSize="@dimen/default_text_size" /> <TextView android:id="@+id/status_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="00" android:textColor="@color/red" android:textSize="@dimen/default_text_size" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Delete"/> </LinearLayout> </LinearLayout>
    

0
投票
您可以通过以下方式以编程方式更改线性布局的方向:

LinearLayout linearLayout = new LinearLayout(this); //just to give the clarity linearLayout.setOrientation(LinearLayout.VERTICAL);
    
© www.soinside.com 2019 - 2024. All rights reserved.