layout_gravity无法在水平线性布局中工作

时间:2015-10-12 08:02:00

标签: android android-linearlayout

我一直在尝试在水平layout_gravity中使用linear layout。但它似乎没有用。我想要使用relative layout或任何其他布局。我想知道为什么它不能与linear layout一起使用。我之前在layout_gravity线性布局中使用了vertical,它按照我预期的方式工作。

<LinearLayout
    android:id="@+id/shata"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <TextView
        android:id="@+id/title_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textColor="@color/black"
        android:text="shata1"
        android:textAppearance="?android:attr/textAppearanceMedium"
        />
    <TextView
        android:id="@+id/map_imageview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="shata2"/>    
</LinearLayout>

正如您所看到的,线性布局有orientation=horizontalwidth=match_parent(它位于根布局内)。但是,即使我已经分别给出了LinearLayoutlayout_gravity=center,但两个TextView都显示在layout_gravity=right的左侧。

6 个答案:

答案 0 :(得分:41)

简短回答:如果你有一个水平的LinearLayout,那么每个孩子只能有layout_gravitytopbottom的{​​{1}}个值。

原因是因为您已经告诉center按照您指定的顺序从左到右水平对齐每个孩子,这意味着它只允许您指定垂直对齐LinearLayout参数中每个孩子的情况,以及layout_gravity垂直时相反的情况。

有一个很好的链接,解释各种重力如何发挥作用here

答案 1 :(得分:5)

作为Matt Taylor's response的补充,您可以使用layout_weight属性指定布局内元素的大小比例。有关详细信息,请参阅此thread

上面的代码将水平空间分成三个等于的区域。

<LinearLayout
    android:id="@+id/shata"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:layout_width="0"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    <TextView
        android:layout_width="0"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    <TextView
        android:layout_width="0"
        android:layout_height="match_parent"
        android:layout_weight="1"/>    
</LinearLayout>

所以在这个例子中

  • 第一个元素看起来像layout_gravity="left"
  • 第二个元素看起来像layout_gravity="center"
  • 第三个元素看起来像layout_gravity="right"

答案 2 :(得分:2)

如果您想让您的孩子视图居中,那么您只需要为孩子们​​提供线性布局重力。在线性布局上设置以下内容:

android:gravity="center"

我希望我的问题是对的。

答案 3 :(得分:1)

你可以将布局分为3部分,然后在右边部分将“shata2”放在中间部分放“shata1”,左边部分放置透明视图。

<LinearLayout
    android:id="@+id/shata"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <View
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        />

    <TextView
        android:id="@+id/title_textview"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center|top"
        android:layout_weight="1"
        android:text="shata1"
        android:gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#111" />

    <TextView
        android:id="@+id/map_imageview"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="right"
        android:gravity="right"
        android:text="shata2"
        android:textAppearance="?android:attr/textAppearanceMedium" />



</LinearLayout>

但是在你的代码中,当你使用线性布局时,它只是一个接一个地放置视图,它不关心布局的重力。 希望它有用。

答案 4 :(得分:0)

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView
    style="@style/Base.TextAppearance.AppCompat.Headline"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Blankets &amp;  Carpets" />

<ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/list_home_feature"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="30dp"
    android:layout_marginRight="10dp">

</ListView>

</LinearLayout>

答案 5 :(得分:0)

在水平线性布局中创建三个子节点的一种方法是(测试):

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

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_height="wrap_content"/>

            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="" />