layout_gravity 与 gravity

前言

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值