繁体   English   中英

CardView cardUseCompatPadding

[英]CardView cardUseCompatPadding

我正在为Lollipop和早期版本开发Android应用程序。

我正在使用CardView(这个cardView没有任何孩子,它只是放在我的View后面)来创建阴影。

但是当它在前Lollipop设备上运行时会出现问题。

所以我将cardUseCompatPadding设置为true。 我想知道我是否可以获得这个compat填充的值?

有没有我能找到价值的参考?

添加到CardView的compat填充取决于您设置的角的高度和半径。 您可以在支持库中的RoundRectDrawableWithShadow类中找到实际计算。

您可以在运行时使用以下内容计算它:

    float elevation = cardView.getMaxCardElevation();
    float radius = cardView.getRadius();
    double cos45 = Math.cos(Math.toRadians(45));

    int horizontalPadding = (int) (elevation + (1 - cos45) * radius);
    int verticalPadding = (int) (elevation * 1.5 + (1 - cos45) * radius);

更新CardView的向后兼容的最大高程。

如果设备操作系统版本为Lollipop或更新且getUseCompatPadding()为false,则调用此方法无效。 使用此代码

android:elevation="3dp"app:elevation="3dp"到你的cardview

CardView使用Lollipop上的提升属性来显示阴影,然后回退到旧平台上的自定义模拟阴影实现。

由于圆角切割的昂贵性质,在Lollipop之前的平台上,CardView不会剪切与圆角相交的孩子。 相反,它添加了填充以避免这种交集(请参阅setPreventCornerOverlap(boolean)来更改此行为)。

在Lollipop之前,CardView会在其内容中添加填充并为该区域绘制阴影。 此填充量等于两侧的maxCardElevation +(1 - cos45)* cornerRadius,顶部和底部的maxCardElevation * 1.5 +(1 - cos45)* cornerRadius。

由于填充用于偏移阴影的内容,因此无法在CardView上设置填充。 相反,您可以在代码中使用XML中的内容填充属性或代码中的setContentPadding(int,int,int,int)来设置CardView边缘和CardView子节点之间的填充。

请注意,如果您为CardView指定精确尺寸,由于阴影,其内容区域在Lollipop之前和Lollipop之后的平台之间会有所不同。 通过使用api版本特定的资源值,您可以避免这些更改。 或者,如果您希望CardView在Lollipop平台上添加内部填充,之后也可以调用setUseCompatPadding(boolean)并传递true。

要以向后兼容的方式更改CardView的高程,请使用setCardElevation(float)。 CardView将在Lollipop上使用提升API,在Lollipop之前,它将改变阴影大小。 为避免在阴影大小发生变化时移动视图,请使用getMaxCardElevation()来限制阴影大小。 如果要动态更改高程,则应在初始化CardView时调用setMaxCardElevation(float)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM