layout_gravity 与 gravity

来源:互联网 发布:红楼梦解析知乎 编辑:程序博客网 时间:2024/06/06 00:13

前言

layout_gravity 和 gravity 是我们经常在 xml 中使用到的属性,可以说它们与我们的 UI 布局密不可分。使用它们给我们的开发带来了极大的便捷。但要知道,UI 设计是精细且繁琐的,我们如果不能很好的了解它们的不同和各种值的作用,就会造成差之毫厘谬以千里的结果,那是我们所不愿看到的。

这个博客就来讲解一下 layout_gravity 和 gravity的不同,还有它们的各种值的作用。

两者不同

gravity 的中文意思是”重心“,就是表示 View 横向和纵向的停靠位置。

android:gravity 是对 View 控件本身来说的,对 TextView 来说就是用来设置 View 本身的文本应该显示在 View 的什么位置,默认值是左侧。

android:layout_gravity 是相对于包含该元素的父元素来说的,设置该元素在父元素的什么位置。比如TextView,android:layout_gravity 表示 TextView 在界面上的位置。

一个小例子:

<?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">    <Button        android:text="button"        android:textSize="25sp"        android:gravity="bottom|center"        android:layout_gravity="bottom|center_horizontal"        android:layout_width="120dp"        android:layout_height="120dp" />    <Button        android:textSize="25dp"        android:text="button"        android:gravity="top|left"        android:layout_gravity="bottom|right"        android:layout_width="120dp"        android:layout_height="120dp" /></LinearLayout>

Button1并没有按照我们设置的 layout_gravity 属性那样显示在界面的下方正中央,Button2也没有显示在界面的右下方。这是因为我们设置了LinearLayout的 orientation 属性为”vertical”。

对于LinearLayout如果设置 orientation=”vertical”,那么layout_gravity的设置只在水平方向生效,如上图Button1显示在屏幕的水平正中央,而Button2显示在水平方向的最右边。

如果设置 orientation=”horizontal”,那么layout_gravity属性只在垂直方向生效。

属性

属性 作用 top 将对象放在其容器的顶部,不改变其大小。 bottom 将对象放在其容器的底部,不改变其大小。 left 将对象放在其容器的左侧,不改变其大小。 right 将对象放在其容器的右侧,不改变其大小 center_vertical 将对象纵向居中,不改变其大小。垂直对齐方式:垂直方向上居中对齐。 fill_vertical 必要的时候增加对象的纵向大小,以完全充满其容器。垂直方向填充 center_horizontal 将对象横向居中,不改变其大小. 水平对齐方式:水平方向上居中对齐 fill_horizontal 必要的时候增加对象的横向大小,以完全充满其容器. 水平方向填充 center 将对象横纵居中,不改变其大小 fill 必要的时候增加对象的横纵向大小,以完全充满其容器 clip_vertical 附加选项,用于按照容器的边来剪切对象的顶部和/或底部的内容. 剪切基于其纵向对齐设置:顶部对齐时,剪切底部;底部对齐时剪切顶部;除此之外剪切顶部和底部。垂直方向裁剪

在这之外,还有 start 和 end 两个属性,之所以单独拿出来,是因为我们在使用 left 和 right的时候,会提示将left替换为start,right 换成 end,说明它们的功能有相同之处。

left和right代表一种绝对的对齐,而start和end表示基于阅读顺序的对齐。

主要的阅读顺序有两种:从左向右(LTR)和从右向左(RTL)。

当使用left的时候,无论是LTR还是RTL,总是左对齐的;而使用start,在LTR中是左对齐,而在RTL中则是右对齐。所以会建议我们使用 start 和 end,在其它时候它们是一样的。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">    <TextView android:id="@+id/TextView01"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="top"        android:gravity="top"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView02"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="bottom"        android:gravity="bottom"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView03"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="left"        android:gravity="left"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView04"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="right"        android:gravity="right"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView05"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="center_vertical"        android:gravity="center_vertical"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView06"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="fill_vertical"        android:gravity="fill_vertical"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView07"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="center_horizontal"        android:gravity="center_horizontal"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView08"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="fill_horizontal"        android:gravity="fill_horizontal"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView09"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="center"        android:gravity="center"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView10"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="fill"        android:gravity="fill"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView11"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="clip_vertical"        android:gravity="clip_vertical"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView12"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="clip_horizontal"        android:gravity="clip_horizontal"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView13"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="start"        android:gravity="start"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/>    <TextView android:id="@+id/TextView14"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:text="end"        android:gravity="end"        android:textColor="#ffffff"        android:background="#ff0000"        android:layout_margin="1px"/></LinearLayout>

结束语:本文仅用来学习记录,参考查阅。

3 0