在我的水平LinearLayout中,我将一个视图中的重力设置为center_vertical,然后我尝试为第二个视图设置layout_gravity,但该视图与第一个视图中的居中文本对齐!
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_gravity="top"
android:background="@drawable/border"
android:gravity="center_vertical"
android:text="layout_gravity=top gravity=center_vertical" >
</TextView>
<TextView
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_gravity="top"
android:background="@drawable/border"
android:gravity="top"
android:text="layout_gravity=top gravity=top" >
</TextView>
</LinearLayout>
这是相同的代码,但垂直布局。 请注意,所需行为在垂直布局中正常工作。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_gravity="left"
android:background="@drawable/border"
android:gravity="center_horizontal"
android:text="layout_gravity=left gravity=center_horizontal" >
</TextView>
<TextView
android:layout_width="200dp"
android:layout_height="100dp"
android:layout_gravity="right"
android:background="@drawable/border"
android:gravity="right"
android:text="layout_gravity=right gravity=right" >
</TextView>
</LinearLayout>
我可以使用RelativeLayout或其他嵌套的LinearLayout来解决问题。但是我问这个问题因为我想知道我是否不理解引力和layout_gravity是如何工作的!对我来说,了解这些基本属性是如何工作对我很重要。感谢
答案 0 :(得分:7)
如果你想要一个居中,一个顶部,那么你需要为LinearLayout添加一个基线对齐标志
android:baselineAligned="false"
布局默认对齐子项的基线。当孩子们使用不同的重力值时,这可能会导致这样的问题。
与垂直方向的不同之处在于基线无法在水平方向上对齐。
请参阅:
http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:baselineAligned
其他信息 - 这似乎比我能更好地解释这个问题:
http://www.doubleencore.com/2013/10/shifty-baseline-alignment/
答案 1 :(得分:0)
gravity
是视图本身如何将其内容定位在由宽度和高度确定的区域内。 layout_gravity
是父视图将孩子定位在父母区域内的方式。通常,您只需在gravity
上设置LinearLayout
,而不是在其所有子级上设置layout_gravity
。
请注意,对于LinearLayouts,gravity
仅对不是方向的轴产生影响,例如top和bottom与水平LinearLayout相关,但左右(或开始和结束)不相关。
答案 2 :(得分:0)
如果你正在尝试一些不相互联系的东西,那就是#34;即你想在两个小部件之间留出一些空间,然后使用空白小部件并使用权重
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:weightSum="100" >
<TextView
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_weight="40"
android:gravity="center_vertical"
android:text="layout_gravity=top gravity=center_vertical" >
</TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="20" />
<TextView
android:layout_width="100dp"
android:layout_height="200dp"
android:layout_weight="40"
android:gravity="right"
android:text="layout_gravity=top gravity=top" >
</TextView>
</LinearLayout>
你不清楚你想要的输出,这是我可以解释为你所需的输出..但我会解释你如何工作.. 有关权重的更多信息,您可以转到http://developer.android.com/reference/android/widget/package-summary.html
有一种叫做&#34; widget&#34;和&#34;小部件的内容&#34; 在谈论使用 layout_gravity 的linearlayout时,你将它自身的引力设置为&#34;小部件&#34;在主视图中,使用 gravity ,您可以将重力设置为该线性布局中的内容
与textview相似,如果你使用 layout_gravity (比如等于中心),那么textview将在其空间中居中(即如果layoutorientation是垂直的,它将以其宽度为中心,并且它如果layout_orientation是水平的,则将以其高度为中心)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:text="Second Activity" />
</LinearLayout>
在垂直方向上看到相同的
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:text="Second Activity" />
</LinearLayout>
当您将重力应用于textview时,现在也可以看到 gravity ,&#34; TEXT&#34;在textview中居中(如果gravity = center)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
**android:gravity="center"**
android:text="Second Activity" />
</LinearLayout>
现在你可以意识到 gravity 将重力设置为小部件中的内容..&#34;内容&#34;一个小部件可以是小部件本身.. LinearLayout是一个小部件,在线性布局中,您还可以添加其他类型的小部件(按钮和文本视图) 因此,将gravity = center应用于textview会将其内容(即文本)设置在中心,并将重力应用于linearlayout,将其内容(即textview)置于中心位置
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:gravity="center"
android:text="Second Activity" />
</LinearLayout>