android:layout_gravity="clip_vertical"是什么意思?

15
属性android:layout_gravity="clip_vertical|horizontal"的作用如SDK文档中所述:

可以设置额外的选项,使得子元素的顶部和/或底部边缘被剪裁到其容器边界内。剪裁将基于垂直重力:上重力会剪切底边缘,下重力会剪切顶边缘,而不设置则两个边缘都不会被剪切。

但是我在我的应用程序中看不到它的任何作用,

那么这个属性的确切目的是什么?

谢谢

3个回答

26

简短版:

clip_horizontal和clip_vertical是应用于视图本身的度量,而不是任何内容(例如BitmapDrawable中的图像)渲染之前。


详细版:

我对clip_horizontal和clip_vertical也感到困惑。(在我的情况下,它与BitmapDrawable的android:gravity有关,但足够相似以适用。)

根据文档,我认为类似android:gravity="top|left|clip_vertical"这样的语句会导致位图的左上角位于视图的左上角,并且如果位图比视图高,则会在视图的底边缘“裁剪”。 换句话说,只显示视图足够高的位图部分;不要拉伸位图,而是仅显示适合的部分,让其余部分延伸到下边缘以下。

然而,相反的事情发生了:当我设置clip_vertical时,一个大位图被垂直压缩以适应视图的高度。

在查看platform/frameworks/core/java/android/view/Gravity.java中的applyDisplay()方法后,我意识到了我的错误:

被裁剪的不是位图图像,而是视图——最终呈现图像的容器的实际大小。

在我的情况下设置clip_vertical并不意味着“在底边缘裁剪图像”,而是意味着“裁剪BitmapDrawable的视图本身,使其高度与父容器的高度相匹配”......然后导致图像因填充更短的高度而被“压缩”。

因此,重要的是记住,android:gravity和android:layout_gravity中的clip_horizontal和clip_vertical是应用于任何内容(例如我的BitmapDrawable)渲染之前视图本身的度量。


1
谢谢你的解释!就像有人在我对Android的认识中打开了一盏灯。干杯! - SlashG

0
也许没有效果,因为android:layout_gravity中未定义horizontalclip_vertical只是作为基本属性的附加属性使用而已。

很抱歉,但如果我像这样编写它:android:layout_gravity="top|clip_vertical",我仍然看不到任何变化。 - Mina Wissa
你需要将你的视图放在一个实际上会被裁剪的情况下。大多数情况下,这发生在与窗口管理器一起使用时(窗口将与屏幕等裁剪)。 - hackbod

-1

标记以沿水平轴将对象的边缘剪裁到其容器。

查看此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接