我知道我们可以为android:gravity和 android:layout_gravity属性设置以下值:
centercenter_verticalcenter_horizontal等
但是我对这两者感到困惑。
android:gravity和的用法有什么区别android:layout_gravity?
ImageView的行为似乎与有所不同TextView。
我知道我们可以为android:gravity和 android:layout_gravity属性设置以下值:
centercenter_verticalcenter_horizontal等但是我对这两者感到困惑。
android:gravity和的用法有什么区别android:layout_gravity?
ImageView的行为似乎与有所不同TextView。
Answers:
他们的名字应该可以帮助您:
android:gravity设置所使用内容的重力(即其子视图)View。 android:layout_gravity设置View或Layout相对于其父项的重力。 而一个例子是在这里。
layout_东西都定义了影响外部元素的东西。
android:gravity设置为左侧,将其子级android:layout_gravity设置为右侧,会发生什么呢?孩子们将向哪一侧对齐?
gravity安排所述内容内的图。layout_gravity将视图的位置布置在自身之外。有时也有助于查看图片。绿色和蓝色是TextViews,其他两个背景颜色是LinearLayouts。
layout_gravity不适合的意见在工作RelativeLayout。将其用于LinearLayout或中的视图FrameLayout。请参阅我的补充答案以获取更多详细信息。gravity不会有任何效果。因此,wrap_content和gravity在一起毫无意义。layout_gravity不会有任何效果。因此,match_parent和layout_gravity在一起毫无意义。layout_gravity=center外观一样layout_gravity=center_horizontal,因为他们是在一个垂直线性布局在这里。在这种情况下,您无法垂直居中,因此layout_gravity=center只能水平居中。gravity和layout_gravity布局中的视图。若要查看在设置gravity父布局本身的时会发生什么,请查看我上面提到的补充答案。(摘要:gravity不适RelativeLayout用于,但可用于LinearLayout。)因此请记住,layout _gravity在其layout中安排一个视图。重力将内容安排在视图内部。
这是上面图像的xml供您参考:
<?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: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="gravity=" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#bcf5b1"
android:gravity="left"
android:text="left" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#aacaff"
android:gravity="center_horizontal"
android:text="center_horizontal" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#bcf5b1"
android:gravity="right"
android:text="right" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:background="#aacaff"
android:gravity="center"
android:text="center" />
</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_gravity=" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="left"
android:background="#bcf5b1"
android:text="left" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="center_horizontal"
android:background="#aacaff"
android:text="center_horizontal" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="right"
android:background="#bcf5b1"
android:text="right" />
<TextView
android:layout_width="200dp"
android:layout_height="40dp"
android:layout_gravity="center"
android:background="#aacaff"
android:text="center" />
</LinearLayout>
</LinearLayout>
android:layout_gravity是视图的外部重力。指定视图应接触其父级边框的方向。
android:gravity是该视图的内部引力。指定其内容应沿哪个方向对齐。
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
取layout-gravity为“糊外引力”。
简短答案:使用android:gravity或setGravity()控制容器的所有子视图的重力;使用android:layout_gravity或setLayoutParams()控制容器中单个视图的重力。
长话大说:要控制线性布局容器(例如LinearLayout或)中的重力RadioGroup,有两种方法:
1)要控制LinearLayout容器的所有子视图的重力(就像您在书中所做的那样),请在布局XML文件或代码中的方法中使用android:gravity(而不是android:layout_gravity)setGravity()。
2)要控制子视图在其容器中的重力,请使用android:layout_gravityXML属性。在代码中,需要获取LinearLayout.LayoutParams视图并设置其重力。下面是一个代码示例,该示例将按钮设置在水平容器的底部:
import android.widget.LinearLayout.LayoutParams;
import android.view.Gravity;
...
Button button = (Button) findViewById(R.id.MyButtonId);
// need to cast to LinearLayout.LayoutParams to access the gravity field
LayoutParams params = (LayoutParams)button.getLayoutParams();
params.gravity = Gravity.BOTTOM;
button.setLayoutParams(params);
对于水平LinearLayout容器,其子视图的水平重力一个接一个地左对齐,并且无法更改。设置android:layout_gravity为center_horizontal无效。默认的垂直重力为中心(或center_vertical),可以更改为顶部或底部。实际上,默认layout_gravity值为,-1但Android会将其垂直居中。
要在水平线性容器中更改子视图的水平位置,可以使用layout_weight,子视图的边距和填充。
类似地,对于垂直视图组容器,其子视图的垂直重力在一个顶部与另一个视图之间对齐,并且不能更改。默认的水平重力为中心(或center_horizontal),可以更改为左或右。
实际上,诸如按钮之类的子视图也具有android:gravityXML属性以及setGravity()控制其子视图的方法-其中的文本。将Button.setGravity(int)被链接到这个developer.android.com条目。

看一下图像以了解重力
如果要在视图中设置内容的重力,则将使用“ android:gravity”,如果要在其父视图中设置该视图(整体)的重力,则将使用“ android: layout_gravity”。
有一个在许多差异gravity和layout-gravity。我将解释我对这两个概念的经验(由于观察和获得一些网站而获得的所有信息)。
在
FrameLayout...中使用重力和布局重力
注意:-
由于某些用户有答案,因此在视图内容中使用了重力,并且重力对所有人都相同ViewGroup Layout。
Layout-gravity 与某些用户有答案的父视图一起使用。
Gravity and Layout-gravity对孩子来说工作更有用FrameLayout。We can't use Gravity and Layout-gravity在FrameLayout的标记中。
我们可以在FrameLayoutusing中的任何位置设置Child View layout-gravity。
我们可以使用的FrameLayout内重力的每一个值(例如: - ,center_vertical,center_horizontal,center,top等),但它是不可能与其他的ViewGroup布局。
FrameLayout全力以赴Layout-gravity。示例:-如果您在工作,FrameLayout则无需更改整个布局即可添加新的视图。您只需将View作为最后一个添加,FrameLayout并赋予他Layout-gravity价值。(这是FrameLayout的layout-gravity的优势)。
看例子...
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:textSize="25dp"
android:background="#000"
android:textColor="#264bd1"
android:gravity="center"
android:layout_gravity="center"
android:text="Center Layout Gravity"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:textColor="#1b64b9"
android:gravity="bottom"
android:layout_gravity="bottom|center"
android:text="Bottom Layout Gravity" />
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:textColor="#d75d1c"
android:gravity="top"
android:layout_gravity="top|center"
android:text="Top Layout Gravity"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginTop="100dp"
android:textColor="#d71f1c"
android:gravity="top|right"
android:layout_gravity="top|right"
android:text="Top Right Layout Gravity"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginBottom="100dp"
android:textColor="#d71cb2"
android:layout_gravity="bottom"
android:gravity="bottom"
android:text="Top Left Layout Gravity"/>
</FrameLayout>
输出:-
在LinearLayout中使用重力和布局重力.....
Gravity与上述相同,但不同的是我们可以在LinearLayout View和中使用Gravity,而在RelativeLayout View中则无法实现FrameLayout View。
垂直方向的LinearLayout ....
注意:-这里我们只能设置3个值layout_gravity(left| right| center(也称为center_horizontal))。
看例子:-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="100dp"
android:textSize="25dp"
android:background="#000"
android:textColor="#264bd1"
android:gravity="center"
android:layout_gravity="center_horizontal"
android:text="Center Layout Gravity \nor \nCenter_Horizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginTop="20dp"
android:textColor="#d75d1c"
android:layout_gravity="right"
android:text="Right Layout Gravity"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginBottom="100dp"
android:textColor="#d71cb2"
android:layout_gravity="left"
android:layout_marginTop="20dp"
android:gravity="bottom"
android:text="Left Layout Gravity"/>
</LinearLayout>
输出:-
方向水平的LinearLayout ....
注意:-在这里我们还可以设置3个值layout_gravity(top| bottom| center(也称为center_vertical))。
看例子:-
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="match_parent">
<TextView
android:layout_width="120dp"
android:layout_height="100dp"
android:textSize="25dp"
android:background="#000"
android:textColor="#264bd1"
android:gravity="center"
android:layout_gravity="bottom"
android:text="Bottom \nLayout \nGravity"/>
<TextView
android:layout_width="120dp"
android:layout_height="100dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginTop="20dp"
android:textColor="#d75d1c"
android:layout_gravity="center"
android:text="Center \nLayout \nGravity"/>
<TextView
android:layout_width="150dp"
android:layout_height="100dp"
android:textSize="25dp"
android:background="#000"
android:layout_marginBottom="100dp"
android:textColor="#d71cb2"
android:layout_gravity="left"
android:layout_marginTop="20dp"
android:text="Left \nLayout \nGravity"/>
</LinearLayout>
输出:-
注意:-我们不能layout_gravity在中使用,RelativeLayout Views但可以用来gravity将子级设置RelativeLayout为相同位置...。
textColor全部设置为白色,view那就太好了。:D
我在Sandip的博客上看到的我几乎错过的东西解决了我的问题。他说layout_gravity不能用LinearLayout。
如果您使用的是“ a” LinearLayout,而重力设置却使您发疯(像我一样),请切换到其他位置。
我实际上切换到a,RelativeLayout然后在2个包含s 上使用layout_alignParentLeft,以使它们在一行上向左和向右移动。layout_alignParentRightTextView
android:gravity用于指定如何将对象的内容放置在对象本身内。换句话说,android:gravity用于指定视图内容的重力。
android:layout_gravity 是孩子可以提供给其父母的属性,以指定其父母内部视图的严重性。
有关更多详细信息,您可以访问
http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
重力:允许您在容器内移动内容。(如何放置子视图)。
重要:(在可用空间内沿X轴或Y轴移动)。
示例:假设您要使用LinearLayout(高度:match_parent,宽度:match_parent)作为根级元素,那么您将拥有可用的完整帧空间;并且子视图说在LinearLayout中的2个TextViews(高度:wrap_content,宽度:wrap_content)可以使用父级上的重力值沿x / y轴移动。
Layout_Gravity:仅允许您沿x轴覆盖父重力行为。
重要:(在可用空间内沿X轴移动[override])。
示例:如果您牢记前面的示例,我们知道重力使我们能够沿x / y轴移动,即:将TextViews放置在LinearLayout中。假设LinearLayout指定重力:center; 意味着每个TextView都必须在垂直和水平方向上居中。现在,如果我们希望其中一个TextView向左/向右移动,则可以使用TextView上的layout_gravity覆盖指定的重力行为。
奖励:如果深入研究,您会发现TextView中的文本充当子视图;因此,如果将重力应用于TextView,则TextView中的文本将四处移动。(整个概念也适用于此)
重力用于在视图中设置文本对齐方式,而layout_gravity用于自行设置视图。让我们举个例子,如果要对齐用editText编写的文本,然后使用重力,并且要对齐此editText或任何按钮或任何视图,然后使用layout_gravity,因此非常简单。
重力:用于简单视图,例如textview,edittext等。
layout_gravity:仅用于当前视图在其相对父视图的上下文中的重力,例如线性Layout或FrameLayout,以使视图居中或位于其父视图的任何其他重力中。