Android 为什么TextView的布局重力在水平线性布局中不起作用?

Android 为什么TextView的布局重力在水平线性布局中不起作用?,android,android-xml,Android,Android Xml,这是我正在尝试的代码。但在水平线性布局中,具有布局权的textview不会向右移动 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"

这是我正在尝试的代码。但在水平线性布局中,具有布局权的textview不会向右移动

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:orientation="horizontal" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:layout_gravity="left"
                android:gravity="center_vertical"
                android:text="This Year"
                android:textColor="@color/gray_dark"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/tvHomeIncomeThisYear"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:gravity="center_vertical"
                android:layout_gravity="right"
                android:text="$0.00 USD"
                android:textColor="#000000"
                android:textSize="18sp" />

        </LinearLayout>

使用相对布局

<RelativeLayout
   android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_gravity="left"
            android:gravity="center_vertical"
            android:text="This Year"
            android:textColor="@color/gray_dark"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:layout_alignParentRight="true" 
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />
</RelativeLayout>


使用相对布局

<RelativeLayout
   android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_gravity="left"
            android:gravity="center_vertical"
            android:text="This Year"
            android:textColor="@color/gray_dark"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:layout_alignParentRight="true" 
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />
</RelativeLayout>



LinearLayout
更改为
RelativeLayout
android:layout\u gravity=“right”
更改为
android:layout\u alignParentRight=“true”
。删除
android:orientation=“horizontal”

LinearLayout
更改为
RelativeLayout
,并将
android:layout\u gravity=“right”
更改为
android:layout\u alignParentRight=“true”
。移除
android:orientation=“horizontal”

线性布局的所有子项都将依次堆叠。对于您的目标,您可以使用FrameLayout,也可以添加空间作为另一个子视图对象:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_gravity="left"
            android:gravity="center_vertical"
            android:text="This Year"
            android:textColor="@color/gray_dark"
            android:textSize="18sp" />

        <Space
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:layout_gravity="right"
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />
 </LinearLayout>


空间
要求API级别14或更高。否则,您可以使用
查看

线性布局的所有子项都将依次堆叠。对于您的目标,您可以使用FrameLayout,也可以添加空间作为另一个子视图对象:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_gravity="left"
            android:gravity="center_vertical"
            android:text="This Year"
            android:textColor="@color/gray_dark"
            android:textSize="18sp" />

        <Space
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:gravity="center_vertical"
            android:layout_gravity="right"
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />
 </LinearLayout>


空间
要求API级别14或更高。否则,您可以使用
View

只需将文本视图
tvhomeinomethiswear
宽度更改为
match\u parent
,并将其
gravity
layou gravity
分别设置为
右侧|垂直中心
垂直中心

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="right|center_vertical"
            android:layout_gravity="center_vertical"
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />

只需将文本视图
tvhomeinomethiswear
宽度更改为
match\u parent
,并将其
gravity
layout\u gravity
分别设置为
right | center\u vertical
center\u vertical

        <TextView
            android:id="@+id/tvHomeIncomeThisYear"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="right|center_vertical"
            android:layout_gravity="center_vertical"
            android:text="$0.00 USD"
            android:textColor="#000000"
            android:textSize="18sp" />

实际上,您不需要将父视图更改为线性布局以外的其他视图,也不需要插入其他视图来充当分隔符等,只需向最左侧的文本视图添加一个值为“1”的
layout\u weight
属性,并将其
layout\u width
设置为零(0dp):



然后,您还可以删除TextView的两个android:layout\u gravity属性,因为它们不是必需的。

您实际上不需要将父视图更改为线性布局以外的其他视图,或者插入其他视图作为间隔符等,只需将值为“1”的
layout\u weight
属性添加到最左侧的TextView即可并将其
layout\u width
设置为零(0dp):



然后,您还可以删除TextView的android:layout\u重力属性,因为它们不是必需的。

谢谢您的回答。但是你能告诉我为什么会这样吗?我将一个孩子设置为左侧,另一个孩子设置为右侧,然后应该自动设置。这是LinearLayout的特殊行为。LinearLayout一个接一个地放大子视图,除了子视图的填充和边距之外,没有任何额外的空间。如果使用orientation=“horizontal”,则第一个视图的右边缘将始终与第二个视图的左边缘接触。在我的代码空间中,布局为\u weight=“1”,因此它将填充所有自由宽度。所以第一个文本视图的右边缘接触空间的左边缘,空间的右边缘接触第二个文本视图的左边缘。因此,主线布局没有任何缺口。
要求API级别14或更高。否则您可以使用
。谢谢您的回答。但是你能告诉我为什么会这样吗?我将一个孩子设置为左侧,另一个孩子设置为右侧,然后应该自动设置。这是LinearLayout的特殊行为。LinearLayout一个接一个地放大子视图,除了子视图的填充和边距之外,没有任何额外的空间。如果使用orientation=“horizontal”,则第一个视图的右边缘将始终与第二个视图的左边缘接触。在我的代码空间中,布局为\u weight=“1”,因此它将填充所有自由宽度。所以第一个文本视图的右边缘接触空间的左边缘,空间的右边缘接触第二个文本视图的左边缘。因此,主线布局没有任何缺口。
要求API级别14或更高。否则,您可以使用