android:gravity
和android:layout_gravity
属性:
center
center_vertical
center_horizontal
等。
android:gravity
和android:layout_gravity
之间有什么区别?android:gravity
和android:layout_gravity
属性:
center
center_vertical
center_horizontal
等。android:gravity
和android:layout_gravity
之间有什么区别?它们的名称应该能帮助您:
android:gravity
设置视图(即其子视图)内容的重力。 android:layout_gravity
设置视图或布局相对于其父级的重力。这里有一个例子 (链接).
android:gravity
设置为左侧,而其子视图的android:layout_gravity
设置为右侧,子视图会对齐到哪一侧? - Thuptengravity
用于排列视图中内部的内容。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
时会发生什么,请查看我上面提到的补充回答。(概括:在RelativeLayout
上gravity
效果不好,但在LinearLayout
上很有用。)因此,请记住:layout_gravity安排一个视图在其布局中。而Gravity排列视图内部的内容。
以下是上面图片的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
是View的外部对齐方式。指定View应该接触其父元素边框的方向。
android:gravity
是View的内部对齐方式。指定其中内容应该对齐的方向。
(如果您有网页开发背景)
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
将layout-gravity
理解为“布局外重力”。
简短回答:使用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);
// 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
、margin和padding属性。center_horizontal
),可以更改为左侧或右侧。android:gravity
的XML属性和setGravity()
方法用于控制其子视图--其中的文本。 Button.setGravity(int)
与此链接:developer.android.com条目。观察图片以更清楚地了解重力。
如果我们想设置视图内内容的重力,那么我们将使用"android:gravity",如果我们想在父视图中设置此视图(作为整体)的重力,则我们将使用"android:layout_gravity"。
android:gravity
是针对视图内部的。android:layout_gravity
是指视图外部。我想在这里加入我的解释 - 我来自iOS背景,以下是我对iOS术语的理解:
Layout Gravity 影响您在父视图中的位置。 Gravity 影响您内部子视图的位置。
换句话说,Layout Gravity 定位您本身,而 Gravity 定位您的子视图。
gravity
和layout-gravity
之间有许多区别。我将解释一下这两个概念的经验(所有信息都是基于我的观察和一些网站所得到的)。
FrameLayout
中Gravity和Layout-gravity的用法......
注意:
Gravity用于视图内容中,因为某些用户有答案,对于所有ViewGroup Layout
都是相同的。
Layout-gravity
与父视图一起使用,因为某些用户有答案。
Gravity和Layout-gravity
在FrameLayout
子节点中更加有用。我们不能在FrameLayout的标签中使用Gravity和Layout-gravity
。
我们可以使用layout-gravity
在FrameLayout
中任何位置设置子视图。
我们可以在FrameLayout
中使用每个单独的Gravity值(例如:center_vertical
,center_horizontal
,center
,top
等),但在其他ViewGroup布局中不可能。
FrameLayout
完全依靠layout-gravity
工作。例如:如果您使用FrameLayout
,则不需要更改整个布局以添加新的视图。您只需将视图作为最后一个添加到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和layout-gravity.....
Gravity
与上述工作原理相同,但不同之处在于我们可以在LinearLayout View
和RelativeLayout View
中使用Gravity,而在FrameLayout View
中这是不可能的。
纵向LinearLayout....
注意:- 在此,我们只能设置layout_gravity
的3个值,即(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....
注意:这里我们还可以设置layout_gravity
的3个值,即(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>
输出:-
注意:我们不能在RelativeLayout视图中使用layout_gravity,但我们可以使用gravity将RelativeLayout的子元素设置为相同的位置...
textColor
设置为白色,那就太好了。 :D - Pratik Butani