Par*_*ani 1286 android android-layout android-gravity
我知道我们可以为android:gravity
和 android:layout_gravity
属性设置以下值:
center
center_vertical
center_horizontal
等但我对这两个问题感到困惑.
使用android:gravity
和有android:layout_gravity
什么区别?
Sep*_*phy 1313
他们的名字可以帮助你:
android:gravity
设置其使用内容的重力(即其子视图)View
. android:layout_gravity
设置View
或Layout
相对于其父级的重力. 而一个例子是在这里.
Sur*_*gch 498
gravity
安排视图内的内容.layout_gravity
安排视图在自身之外的位置.有时候看图片也会有所帮助.绿色和蓝色是TextViews
和其他两种背景颜色LinearLayouts
.
layout_gravity
对于a中的视图不起作用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
在a上效果不好RelativeLayout
但可以用于LinearLayout
.)所以请记住,layout _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>
Run Code Online (Sandbox Code Playgroud)
Vis*_*das 460
android:layout_gravity
是观点的外部引力.指定视图应触及其父边框的方向.
android:gravity
是该视图的内部重力.指定其内容应对齐的方向.
Android | CSS
————————————————————————+————————————
android:layout_gravity | float
android:gravity | text-align
Run Code Online (Sandbox Code Playgroud)
采取layout-gravity
"外部重力".
Yin*_*ing 38
简答:使用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);
Run Code Online (Sandbox Code Playgroud)
对于水平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条目.
小智 13
虽然问题已经回答,但我有一些示例展示了使用gravity,layout_gravity和layout_weight.
您可以在http://juanpickselov.com/LayoutExamples.zip上找到示例
我在Eclipse中创建了文件,删除了.svn子文件夹,并包含了样式,字符串,颜色等.布局文件是演示的主要内容.由于我是Java和Android开发新手,人们可能会发现Java效率低下.这些文件可以复制到Eclipse Project中,或者我也在Netbeans中使用它们,并为该IDE提供了Android开发插件.
小智 11
如果我们想在视图中设置内容的重力,那么我们将使用"android:gravity",如果我们想在其父视图中设置此视图的重力(作为一个整体),那么我们将使用"android: layout_gravity".
记住这一点的一个简单技巧是重力适用于地球内部的我们。所以,android:gravity
是为内部视图。
Rememeber的出在奠定了_gravity这将有助于你要记住,android:layout_gravity
要提到外界的看法
我只想到我在这里添加自己的解释 - 来自iOS的背景,这就是我用iOS术语内化这两者的方式:"布局重力"会影响你在superview中的位置."重力"会影响您的子视图的位置.换句话说,布局重力会在重力定位您的孩子时定位您自己.
gravity
和和有很多不同layout-gravity
.我将解释我对这两个概念的经验(由于我的观察和一些网站而获得的所有信息).
使用重力和布局引力
FrameLayout
......
注意:-
在视图内容中使用重力,因为一些用户有答案,并且所有人都一样ViewGroup Layout
.
Layout-gravity
与某些用户有答案的父视图一起使用.
Gravity and Layout-gravity
是工作更有用与FrameLayout
孩子的.We can't use Gravity and Layout-gravity
在FrameLayout的标签....
我们可以设置Child View在FrameLayout
使用中的任何位置layout-gravity
.
我们可以利用重力的FrameLayout内的每一个值(例如: - ,center_vertical
,center_horizontal
,center
,top
等),但它是不可能与其他的ViewGroup布局.
FrameLayout
全力以赴Layout-gravity
.示例: - 如果您处理,FrameLayout
则无需更改整个布局以添加新视图.你只需添加View作为最后一个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>
Run Code Online (Sandbox Code Playgroud)
输出: -
在LinearLayout中使用重力和布局引力.....
Gravity
工作与上面相同,但这里differnce是,我们可以利用重力里面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>
Run Code Online (Sandbox Code Playgroud)
输出: -
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>
Run Code Online (Sandbox Code Playgroud)
输出: -
注: -我们不能用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 让它们在一条线上去最左边和最右边。
归档时间: |
|
查看次数: |
537256 次 |
最近记录: |