我一直在尝试在水平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=horizontal
和width=match_parent
(它位于根布局内)。但是,即使我已经分别给出了LinearLayout
和layout_gravity=center
,但两个TextView都显示在layout_gravity=right
的左侧。
答案 0 :(得分:41)
简短回答:如果你有一个水平的LinearLayout,那么每个孩子只能有layout_gravity
,top
和bottom
的{{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 & 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="" />