我知道我们可以为android:gravity
和 android:layout_gravity
属性设置以下值:
center
center_vertical
center_horizontal
等
但是我对这两者感到困惑。
android:gravity
和的用法有什么区别android:layout_gravity
?
ImageView
的行为似乎与有所不同TextView
。
我知道我们可以为android:gravity
和 android:layout_gravity
属性设置以下值:
center
center_vertical
center_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_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
,子视图的边距和填充。
类似地,对于垂直视图组容器,其子视图的垂直重力在一个顶部与另一个视图之间对齐,并且不能更改。默认的水平重力为中心(或center_horizontal
),可以更改为左或右。
实际上,诸如按钮之类的子视图也具有android:gravity
XML属性以及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的标记中。
我们可以在FrameLayout
using中的任何位置设置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_alignParentRight
TextView
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,以使视图居中或位于其父视图的任何其他重力中。