android:gravity
我知道我们可以为和 android:layout_gravity
属性设置以下值:
center
center_vertical
center_horizontal
, ETC。
但我对这两个都感到困惑。
android:gravity
和的用法有什么区别android:layout_gravity
?
android:gravity
我知道我们可以为和 android:layout_gravity
属性设置以下值:
center
center_vertical
center_horizontal
, ETC。但我对这两个都感到困惑。
android:gravity
和的用法有什么区别android:layout_gravity
?
他们的名字应该可以帮助你:
android:gravity
设置它所使用的内容(即它的子视图)的重力View
。 android:layout_gravity
View
设置orLayout
相对于其父 级的重力。这里有一个例子。
gravity
排列视图内的内容。layout_gravity
将视图的位置安排在自身之外。有时,看一张照片也有帮助。绿色和蓝色是TextViews
,其他两种背景颜色是LinearLayouts
。
layout_gravity
不适用于 a 中的视图RelativeLayout
。将其用于 aLinearLayout
或中的视图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
在 a 上效果不佳,RelativeLayout
但对 a 很有用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
是该视图的内部重力。指定其内容应对齐的方向。
(如果您来自 Web 开发背景)
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
以layout-gravity
“外重力”为例。
简短答案:使用android:gravity
或setGravity()
控制容器的所有子视图的重力;使用android:layout_gravity
或setLayoutParams()
控制容器中单个视图的重力。
长话短说:要控制线性布局容器中的重力,例如LinearLayout
or RadioGroup
,有两种方法:
要控制容器的所有子视图的重力LinearLayout
(就像您在书中所做的那样),请在布局 XML 文件或代码中的方法中使用android:gravity
(not )。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(或 center_vertical),可以更改为 top 或 bottom。实际上默认layout_gravity
值是-1
但Android将它垂直居中。
要更改水平线性容器中子视图的水平位置,可以使用layout_weight
子视图的 , 边距和填充。
同样,对于垂直视图组容器,其子视图的垂直重力上下对齐,并且不能更改。默认水平重心为中心(或center_horizontal
),可更改为左或右。
实际上,像按钮这样的子视图也具有android:gravity
XML 属性和setGravity()
控制其子视图的方法——其中的文本。Button.setGravity(int)
链接到这个developer.android.com条目。
据我所知, layout_gravity是该视图在其父视图内的重力,而重力是该视图内子视图的重力。
我认为这是正确的,但找出答案的最好方法是到处玩。
查看图像以清楚地了解重力
如果我们想在视图中设置内容的重力,那么我们将使用“android:gravity”,如果我们想在其父视图中设置该视图(作为一个整体)的重力,那么我们将使用“android:布局重力”。
记住这一点的一个简单技巧是重力适用于我们在地球内部。所以,android:gravity
是在视图内部。
记住out in layout _gravity这将帮助您记住它指android:layout_gravity
的是视图之外
只是想我会在这里添加我自己的解释 - 来自 iOS 的背景,这就是我在 iOS 术语中内化两者的方式:
布局重力会影响您在超级视图中的位置。重力会影响您的子视图在您内部的位置。
换句话说,布局重力定位你自己,而重力定位你的孩子。
gravity
和有很多不同layout-gravity
。我将解释我对这两个概念的经验(我通过观察和一些网站获得的所有信息)。
FrameLayout
在......中使用重力和布局重力
笔记:-
由于某些用户有答案,因此在查看内容中使用了重力ViewGroup Layout
,并且对所有人都是一样的。
Layout-gravity
与父视图一起使用,因为某些用户有答案。
Gravity and Layout-gravity
与孩子们一起工作更有用。在 FrameLayout 的 Tag ....FrameLayout
We can't use Gravity and Layout-gravity
我们可以在FrameLayout
using中的任何位置设置子视图layout-gravity
。
我们可以使用 FrameLayout 中的每一个重力值(例如:- center_vertical
、center_horizontal
、center
、top
等),但对于其他 ViewGroup Layouts 是不可能的。
FrameLayout
全力以赴Layout-gravity
。示例:- 如果您继续工作,FrameLayout
则无需更改整个布局即可添加新视图。您只需在最后添加 ViewFrameLayout
并为他Layout-gravity
提供价值。(这是 FrameLayout 布局重力的优点)。
看看例子......
<?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
在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
孩子设置为相同的位置....
我在 Sandip 的博客上看到的几乎错过的东西解决了我的问题。他说不layout_gravity
适用LinearLayout
。
如果您使用的是 aLinearLayout
并且重力设置让您发疯(像我一样),那么请切换到其他东西。
我实际上切换到一个RelativeLayout
then used layout_alignParentLeft
and layout_alignParentRight
on the 2 contains TextView
s 让它们在一条线上去最左边和最右边。
两者的基本区别在于——
android:gravity用于视图的子元素。
android:layout_gravity用于此元素相对于父视图。
android:gravity
用于指定如何将对象的内容放置在对象本身内。换句话说,android:gravity 用于指定视图内容的重力。
android:layout_gravity
是孩子可以提供给其父母的属性,以指定其父母中的视图的重力。
有关更多详细信息,您可以访问
http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
重力:允许您在容器内移动内容。(如何放置子视图)。
重要:(在可用空间内沿 X 轴或 Y 轴移动)。
示例:假设您使用 LinearLayout (Height: match_parent, Width: match_parent) 作为根级元素,那么您将拥有完整的框架空间;并且子视图说LinearLayout内的2个TextView(高度:wrap_content,宽度:wrap_content)可以使用父级上的相应重力值沿x / y轴移动。
Layout_Gravity:允许您仅沿 x 轴覆盖父重力行为。
重要提示:(在可用空间内沿 X 轴移动 [覆盖])。
示例:如果您记住前面的示例,我们知道重力使我们能够沿 x/y 轴移动,即;在 LinearLayout 中放置 TextViews。假设 LinearLayout 指定重力:中心;这意味着每个 TextView 都需要垂直和水平居中。现在,如果我们希望 TextView 之一向左/向右移动,我们可以使用 TextView 上的 layout_gravity 覆盖指定的重力行为。
奖励:如果你深入挖掘,你会发现 TextView 中的文本充当子视图;因此,如果您在 TextView 上应用重力,则 TextView 内的文本会四处移动。(整个概念也适用于此)
Gravity 用于设置视图中的文本对齐方式,但 layout_gravity 用于设置它自己的视图。举个例子,如果你想对齐用editText编写的文本然后使用重力,你想对齐这个editText或任何按钮或任何视图然后使用layout_gravity,所以它非常简单。
重力:用于简单的视图,如 textview、edittext 等。
layout_gravity:仅用于当前视图的重力在其相对父视图的上下文中,如线性布局或框架布局,以使视图处于中心或其父的任何其他重力。
设置孩子的android:gravity
重力(位置),而android:layout_gravity
设置视图本身的位置。希望能帮助到你
android:gravity
用于调整相对于其指定位置(分配区域)的视图内容。android:gravity="left"
如果layout_width
等于"wrap_content"
android:layout_gravity
用于相对于父文件或布局文件的视图本身。
android:gravity
-> 设置其使用的视图内容的重力。
android:layout_gravity
-> 设置它的父视图或布局的重力
重力——适用于自己的观点。
layout-gravity---适用于与其父级相关的视图。
Gravity 和 layout_gravity 都是 XML 属性。
android:gravity 属性用于安排视图内内容的位置(例如 Button 小部件内的文本)。
android:layout_gravity用于安排整个 View 相对于它的容器的位置。
有关更多详细信息,您可以查看此链接。