我知道我们可以为android设置以下值:gravity和android:layout_gravity财产:

居中中心_垂直center_horizontal等。

但我对这两者都感到困惑。

android:gravity和android:layout_gravity的用法有什么区别?


当前回答

不同之处在于

android:layout_gravity是视图的外部重力。指定视图应接触其父对象边界的方向。

android:重力是该视图的内部重力。指定其内容应对齐的方向。

HTML/CSS等价物

(如果您来自web开发背景)

Android                 | CSS
————————————————————————+————————————
android:layout_gravity  | float
android:gravity         | text-align

帮助你记住的简单技巧

将布局重力作为“外部重力”。

其他回答

Gravity和layout_Gravity都是XML属性。

android:gravity属性用于排列视图中内容的位置(例如Button小部件中的文本)。

android:layout_gravity用于安排整个视图相对于其容器的位置。

有关详细信息,请参阅此链接。

gravity:用于文本视图、编辑文本等简单视图。

layout_gravity:用于当前视图在其相对父视图(如linear layout或FrameLayout)的上下文中的重力,以使视图位于父视图的中心或任何其他重力。

重力:允许您移动容器内的内容。(如何放置子视图)。

重要提示:(在可用空间内沿X轴或Y轴移动)。

示例:假设您要使用LinearLayout(Height:match_parent,Width:match_parent)作为根级元素,那么您将拥有完整的帧空间;并且子视图表示LinearLayout内的2个文本视图(Height:wrap_content,Width:wrap-content)可以使用父视图上的重力值沿x/y轴移动。

Layout_Gravity:允许您仅沿x轴覆盖父重力行为。

重要提示:(在可用空间内沿X轴移动[覆盖])。

示例:如果您记住前面的示例,我们知道重力使我们能够沿着x/y轴移动,即:;将TextViews放置在LinearLayout中。让我们假设LinearLayout指定重力:中心;这意味着每个TextView都需要垂直和水平居中。现在,如果我们希望其中一个TextView向左/向右移动,我们可以使用TextView上的layout_gravity覆盖指定的重力行为。

另外:如果你深入挖掘,你会发现TextView中的文本充当子视图;因此,如果在TextView上应用重力,TextView内的文本将四处移动。(整个概念也适用于此)

两者的基本区别在于-

android:gravity用于视图的子元素。

android:layoutgravity用于相对于父视图的此元素。

简短回答:使用android:gravity或setGravity()控制容器所有子视图的重力;使用android:layout_gravity或setLayoutParams()控制容器中单个视图的重力。

长话短说:要控制线性布局容器(如LinearLayout或RadioGroup)中的重力,有两种方法:

要控制LinearLayout容器的所有子视图的重力(正如您在书中所做的那样),请在布局XML文件中使用android:gravity(而不是android:layout_gravity)或代码中使用setGravity()方法。要控制子视图在其容器中的重力,请使用android:layout_gravity XML属性。在代码中,需要获取视图的LinearLayout.LayoutParams并设置其重力。下面是一个代码示例,它在水平方向的容器中将按钮设置为底部:import android.widget.LinearLayout.LayoutParams;import android.view.Gravity;...Button Button=(Button)findViewById(R.id.MyButtonId);//需要转换为LinearLayout.LayoutParams才能访问重力场LayoutParams params=(LayoutParams)按钮.getLayoutParams();params.gravity=重力.BOTTOM;button.setLayoutParams(params);

对于水平LinearLayout容器,其子视图的水平重力一个接一个地左对齐,不能更改。将android:layout_gravity设置为center_horizontal没有效果。默认垂直重力为中心(或center_vertical),可以更改为顶部或底部。实际上,默认layout_gravity值为-1,但Android将其垂直居中。

要更改水平线性容器中子视图的水平位置,可以使用子视图的layout_weight、margin和padding。

同样,对于垂直视图组容器,其子视图的垂直重力是上下对齐的,不能更改。默认水平重力为center(或center_horizontal),可以更改为向左或向右。

实际上,像按钮这样的子视图还具有android:gravity XML属性和setGravity()方法来控制其子视图——其中的文本。button.setGravity(int)链接到此developer.android.com条目。