我知道我们可以将以下值设置为 android:gravity
和 android:layout_gravity
属性:
center
center_vertical
center_horizontal
等但我对这两个问题感到困惑。
android:gravity
和android:layout_gravity
的使用之间有什么区别?
答案 0 :(得分:1274)
他们的名字可以帮到你:
android:gravity
设置其使用的View
的内容(即其子视图)的严重性。 android:layout_gravity
设置相对于其父级的View
或Layout
的严重性。 一个例子是here。
答案 1 :(得分:479)
gravity
在视图中排列内容。 layout_gravity
安排视图在之外的位置。有时看图片也会有所帮助。绿色和蓝色为TextViews
,其他两种背景颜色为LinearLayouts
。
layout_gravity
不适用于RelativeLayout
中的观看次数。将其用于LinearLayout
或FrameLayout
中的观看次数。有关详细信息,请参阅我的supplemental answer。gravity
不会产生任何影响。因此,wrap_content
和gravity
在一起毫无意义。layout_gravity
不会产生任何影响。因此,match_parent
和layout_gravity
在一起毫无意义。layout_gravity=center
看起来与layout_gravity=center_horizontal
相同,因为它们处于垂直线性布局中。在这种情况下,您无法垂直居中,因此layout_gravity=center
只能水平居中。gravity
和layout_gravity
。要查看在设置父布局本身的gravity
时会发生什么,请查看我上面提到的supplemental answer。 (摘要:gravity
在RelativeLayout
上效果不佳,但对LinearLayout
有用。)请记住,布局 _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>
答案 2 :(得分:455)
android:layout_gravity
是视图的外部重力。指定视图应触及其父边框的方向。
android:gravity
是该视图的内部重力。指定其内容应对齐的方向。
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
将layout-gravity
视为“外放重力”。
答案 3 :(得分:38)
简答:使用android:gravity
或setGravity()
来控制容器的所有子视图的重力;使用android:layout_gravity
或setLayoutParams()
来控制容器中单个视图的重力。
长篇故事:要控制线性布局容器(例如LinearLayout
或RadioGroup
)中的重力,有两种方法:
1)要控制LinearLayout
容器的所有子视图的重力(就像您在书中所做的那样),请在布局XML文件中使用android:gravity
(不是android:layout_gravity
)或{代码中的{1}}方法。
2)要控制其容器中子视图的重力,请使用setGravity()
XML属性。在代码中,需要获取视图的android:layout_gravity
并设置其重力。下面是一个代码示例,它将按钮设置在水平方向容器的底部:
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(或center_vertical),可以更改为top或bottom。实际上,默认center_horizontal
值为layout_gravity
,但Android会将其垂直居中。
要更改水平线性容器中子视图的水平位置,可以使用子视图的-1
,边距和填充。
同样,对于垂直视图组容器,其子视图的垂直重力在另一个下方顶部对齐,无法更改。默认的水平重力是中心(或layout_weight
),可以更改为左或右。
实际上,子视图(如按钮)还具有center_horizontal
XML属性和android:gravity
方法来控制其子视图 - 其中的文本。 setGravity()
与此developer.android.com entry相关联。
答案 4 :(得分:34)
我可以收集的内容 layout_gravity 是该视图中父视图的重力, gravity 是该视图中子视图的重力。
我认为这是正确的,但找出答案的最好方法是玩弄。
答案 5 :(得分:25)
看图像清楚重力
答案 6 :(得分:13)
虽然问题已经回答,但我有一些示例展示了使用gravity,layout_gravity和layout_weight。
您可以在http://juanpickselov.com/LayoutExamples.zip
找到示例我在Eclipse中创建了文件,删除了.svn子文件夹,并包含了样式,字符串,颜色等。布局文件是演示的主要内容。由于我是Java和Android开发新手,人们可能会发现Java效率低下。这些文件可以复制到Eclipse Project中,或者我也在Netbeans中使用它们,并为该IDE提供了Android开发插件。
答案 7 :(得分:11)
如果我们想在视图中设置内容的重力,那么我们将使用“android:gravity”,如果我们想在其父视图中设置此视图的重力(作为一个整体),那么我们将使用“机器人:layout_gravity”。
答案 8 :(得分:7)
我想在这里添加我自己的解释 - 来自iOS的背景,这就是我用iOS术语将这两者内化的方式:“布局重力”会影响你在superview中的位置。 “重力”会影响您的子视图的位置。换句话说,布局重力会在重力定位你的孩子时定位你自己。
答案 9 :(得分:6)
gravity
和layout-gravity
有很多不同之处。我将解释我对这两个概念的经验(由于我的观察和一些网站而得到的所有信息)。
在
中使用重力和布局重力FrameLayout
.....
注意: -
Gravity 在查看内容中使用,因为有些用户有回答,并且所有ViewGroup Layout
都相同。
Layout-gravity
与父视图一起使用,因为有些用户有回答。
Gravity and Layout-gravity
工作更有用与FrameLayout
个孩子一起使用。 FrameLayout的标签中的We can't use Gravity and Layout-gravity
....
我们可以使用FrameLayout
设置子视图layout-gravity
中的任何位置。
我们可以在FrameLayout中使用每一个重力值(例如: - center_vertical
,center_horizontal
,center
,top
等),但它其他ViewGroup布局无法实现。
FrameLayout
完全致力于Layout-gravity
。示例: - 如果您使用FrameLayout
,则不需要更改整个布局以添加新视图。您只需添加查看作为FrameLayout
中的最后一个,并为其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
与上述相同但不同之处在于我们可以在LinearLayout View
和RelativeLayout View
中使用重力,这在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>
输出: -
注意: - 我们无法在layout_gravity
中使用RelativeLayout Views
,但我们可以使用gravity
将RelativeLayout
个孩子设置为相同的位置。 .. 强>
答案 10 :(得分:4)
我在Sandip博客上看到的一些我几乎错过的东西,解决了我的问题。他说layout_gravity
不与LinearLayout
合作。
如果您正在使用LinearLayout
并且重力设置让您疯狂(像我一样),那么请切换到其他内容。
我实际上切换到RelativeLayout
,然后在包含layout_alignParentLeft
的2上使用layout_alignParentRight
和TextView
,让他们在一条线上向左和向右走。
答案 11 :(得分:4)
记住这一点的一个简单诀窍是重力适用于地球内部的我们。因此,android:gravity
用于内部视图。
记住 out _gravity 中的 out ,这有助于您记住android:layout_gravity
会引用外部视图
答案 12 :(得分:2)
android:gravity
用于指定如何将对象的内容放置在对象本身中。换句话说,android:gravity用于指定视图内容的重力。
android:layout_gravity
是孩子可以向其父级提供的归因,用于指定其父级视图的重力。
有关详细信息,请访问
http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
答案 13 :(得分:2)
重力:允许您移动容器内的内容。 (如何放置子视图)。
重要事项:(在可用空间内沿X轴或Y轴移动)。
示例:假设您使用LinearLayout(Height:match_parent,Width:match_parent)作为根级元素,那么您将拥有可用的全帧空间;并且子视图说明,LinearLayout内的2个TextViews(高度:wrap_content,Width:wrap_content)可以使用相应的父级重力值沿x / y轴移动。
Layout_Gravity:允许您仅沿x轴覆盖父重力行为。
重要事项:(在可用空间内沿X轴移动[覆盖])。
示例:如果你记住上一个例子,我们知道引力使我们沿着x / y轴移动,即; LinearLayout中的TextViews。我们只说LinearLayout指定gravity:center;意味着每个TextView都需要垂直和水平居中。现在,如果我们想要一个TextView向左/向右移动,我们可以使用TextView上的layout_gravity覆盖指定的重力行为。
加分:如果你深入挖掘,你会发现TextView中的文本充当子视图;因此,如果在TextView上应用重力,TextView内的文本将会移动。 (整个概念也适用于此处)
答案 14 :(得分:2)
两者之间的基本区别在于 -
android:gravity 用于视图的子元素。
相对于父视图,android:layout_gravity 用于此元素。
答案 15 :(得分:1)
Gravity用于在视图中设置文本对齐,但layout_gravity用于设置自己的视图。让我们举一个例子,如果你想对齐用editText写的文本然后使用gravity,你想要对齐这个editText或任何按钮或任何视图然后使用layout_gravity,所以它非常简单。
答案 16 :(得分:1)
gravity :用于简单视图,如textview,edittext等。
layout_gravity :仅用于当前视图重力在其相对父视图的上下文中,如线性布局或FrameLayout,以使视图处于中心或其父级的任何其他重力。
答案 17 :(得分:0)
android:gravity
用于调整视图相对于其指定位置(已分配区域)的内容。如果android:gravity="left"
等于layout_width
"wrap_content"
将无法执行任何操作
android:layout_gravity
用于相对于父文件或布局文件的视图本身。
答案 18 :(得分:0)
android:gravity
- &gt;设置其使用的视图内容的重力。
android:layout_gravity
- &gt;设置它的父视图或布局
答案 19 :(得分:0)
重力-适用于其自身视图。
layout-gravity ---适用于与其父级相关的视图。
答案 20 :(得分:0)
android:gravity
设置子级的重力(位置),而android:layout_gravity
设置视图本身的位置。希望对您有帮助