layout_gravity无法正常工作-只是部分

时间:2018-09-05 17:26:13

标签: android android-layout

我的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

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

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

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="start"
                android:text="@string/title_day"
                android:textStyle="bold"
                android:textSize="20sp" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="start"
                android:text="Tuesday"
                android:textSize="16sp" />

        </LinearLayout>

        <TextView
            android:id="@+id/tv_fail"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="+22"
            android:textSize="16sp"
            android:layout_gravity="end|center_vertical" />

    </LinearLayout>

</LinearLayout>

这看起来像这样:

enter image description here

我希望将ID为tv_fail的最后一个TextView固定在屏幕的右端。我想那

android:layout_gravity="end|center_vertical"

应该处理它,但是此指令将TextView垂直居中,但不会将其移动到结尾。如何解决?

2 个答案:

答案 0 :(得分:1)

如果您只想将text设置为最后一个TextView的结尾,则应使用:

android:gravity="end"

用于TextView重力:

android:layout_gravity="center"

android:gravityandroid:layout_gravity之间的区别是,第一个在给定重力的情况下将内容布置在任何视图内,而第二个则根据给定的重力来布置视图。


  

更新的代码:

     

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

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="start"
            android:text="title_day"
            android:textSize="20sp"
            android:textStyle="bold" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="start"
            android:text="Tuesday"
            android:textSize="16sp" />

    </LinearLayout>

    <TextView
        android:id="@+id/tv_fail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="+22"
        android:textSize="16sp" />

</LinearLayout>
     

答案 1 :(得分:1)

  

我想是

android:layout_gravity="end|center_vertical"
     

应该处理它,但是此说明使TextView垂直居中,但不会将其移动到结尾。

这是由于LinearLayout的工作方式;您对layout_gravity的理解通常是正确的。

LinearLayout将其子级放置在一行中,并且所有子级都将打包到LinearLayout的“开始”位置。换句话说,水平LinearLayout将忽略子级layout_gravity属性的水平分量。

有几种方法可以解决此问题。我认为最适合您的情况的方法是使TextView拉伸以填充LinearLayout中的所有剩余空间(使用layout_weight),然后将TextView的文本放在其内容区域的末尾(使用gravity)。

<TextView
    android:id="@+id/tv_fail"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="+22"
    android:textSize="16sp"
    android:layout_gravity="center_vertical"
    android:gravity="end"/>