layout_gravity在LinearLayout中不适用于水平方向

时间:2018-12-28 07:59:02

标签: android android-linearlayout layout-gravity

我想将LinearLayout中的文本和图像对齐在同一行中。我曾考虑过在layout_gravityTextView内的ImageViewLinearLayout中使用orientation=horizontal选项,但这似乎不起作用。有什么原因吗?

显然,layout_gravity仅适用于orientation=vertical

我可以在主线性布局中使用多个线性布局,但是正在寻找一种优雅的方法。

以下是同一代码:

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:background="#e3e2ad"
            android:orientation="vertical" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="24sp"
                    android:text="Layout's Vertical Orientation" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="#bcf5b1"
                    android:layout_gravity="left"
                    android:text="left" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right"
                    android:src="@drawable/pigeon"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#d6c6cd"
            android:orientation="vertical" >
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="24sp"
                    android:text="Layout's Horizontal Orientation" />
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="#bcf5b1"
                            android:layout_gravity="left"
                            android:text="left" />

                        <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="right"
                            android:src="@drawable/pigeon"/>
                </LinearLayout>

        </LinearLayout>

</LinearLayout>

这是输出: enter image description here

我已经在这里检查了该问题的答案,但是并没有解决该问题。 Difference between gravity and layout_gravity on Android

4 个答案:

答案 0 :(得分:0)

用您的代码替换此布局,并根据需要更改权重 您必须将android:layout_weight传递给子视图      

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="center_horizontal"
        android:layout_weight="0.33"
        android:text="Layout's Vertical Orientation"
        android:textSize="24sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="left"
        android:layout_weight="0.33"
        android:background="#bcf5b1"
        android:text="left" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_gravity="right"
        android:layout_weight="0.33"
        android:src="@drawable/pigeon" />

</LinearLayout>

答案 1 :(得分:0)

在线性布局内使用另一个相对布局,并在其下添加textview和imageview。然后,您将它们对齐在同一行。

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:background="#e3e2ad"
            android:orientation="vertical" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="24sp"
                    android:text="Layout's Vertical Orientation" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:background="#bcf5b1"
                    android:layout_gravity="left"
                    android:text="left" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right"
                    android:src="@drawable/pigeon"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#d6c6cd"
            android:orientation="vertical" >
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:textSize="24sp"
                    android:text="Layout's Horizontal Orientation" />
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">
                 <RelativeLayout
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:background="#bcf5b1"
                            //android:layout_weight="0.5"

                            android:layout_gravity="left"
                            android:text="left" />

                        <ImageView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_gravity="right"
                            //android:layout_weight="0.5"

                            android:src="@drawable/pigeon"/>

                           </RelativeLayout>
                </LinearLayout>

        </LinearLayout>

</LinearLayout>

也请尝试添加我上面在评论中提到的权重。那会帮助

答案 2 :(得分:0)

您可以使用RelativeLayout,android:layout_alignParentRight =“ true” ontrol位于父控件的右侧。

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#bcf5b1"
            android:text="left" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@drawable/ic_launcher_background"/>
    </RelativeLayout>

答案 3 :(得分:0)

根据我的研究,您已经通过指定“水平”来告诉您要使内容从左到右对齐,因此layout_gravity可以指定的唯一选项是像{{1} }或top。我强烈建议对this question的第一个答案。简短的答案可能是,是的,即使(我认为)您想为横向屏幕模式指定布局,也必须指定bottom方向。

如果您想要垂直和水平方向的不同属性you need to create two separate filesvertical中的一个。

考虑到一些关于垂直与水平布局而不是纵向(垂直)与横向(水平)屏幕方向的问题,这更加令人困惑不要怪你没有直截了当的答案。

此外,我建议使用RelativeLayout或据称效率更高的ConstraintLayout,这可能需要一些时间来习惯,但可能是您正在寻找的优雅解决方案。