android:layout_gravity="clip_vertical|horizontal"
的作用如SDK文档中所述:
可以设置额外的选项,使得子元素的顶部和/或底部边缘被剪裁到其容器边界内。剪裁将基于垂直重力:上重力会剪切底边缘,下重力会剪切顶边缘,而不设置则两个边缘都不会被剪切。
但是我在我的应用程序中看不到它的任何作用,
那么这个属性的确切目的是什么?
谢谢
android:layout_gravity="clip_vertical|horizontal"
的作用如SDK文档中所述:
可以设置额外的选项,使得子元素的顶部和/或底部边缘被剪裁到其容器边界内。剪裁将基于垂直重力:上重力会剪切底边缘,下重力会剪切顶边缘,而不设置则两个边缘都不会被剪切。
但是我在我的应用程序中看不到它的任何作用,
那么这个属性的确切目的是什么?
谢谢
简短版:
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)渲染之前视图本身的度量。