首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CardView cardUseCompatPadding

CardView cardUseCompatPadding
EN

Stack Overflow用户
提问于 2016-01-07 21:23:08
回答 2查看 18.5K关注 0票数 9

我正在为棒棒糖和以前的版本开发一个Android应用程序。

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

但当它在pre Lollipop设备上运行时,问题就出现了。

因此,我将cardUseCompatPadding设置为true。我想知道这个软垫的价值是多少?

有没有什么地方可以找到这个值的引用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-07 22:12:53

添加到CardView的复合填充取决于已设置的角点的标高和半径。您可以在support库中的RoundRectDrawableWithShadow类中找到实际的计算。

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

代码语言:javascript
复制
    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);
票数 15
EN

Stack Overflow用户

发布于 2016-11-15 02:12:15

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

如果设备操作系统版本是棒棒糖或更高版本,并且getUseCompatPadding()为false,则调用此方法不起作用。使用此代码

android:elevation="3dp"app:elevation="3dp"到您的卡片视图

CardView将棒棒糖上的高程特性用于阴影,并在较旧的平台上回退到自定义模拟阴影实现。

由于圆角裁剪的昂贵性质,在棒棒糖之前的平台上,CardView不会裁剪与圆角相交的子项。相反,它添加填充以避免这种交集(请参阅setPreventCornerOverlap(布尔值)以更改此行为)。

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

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

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

要以向后兼容的方式更改CardView的标高,请使用setCardElevation(float)。CardView将在棒棒糖上使用elevation API,在棒棒糖之前,它将更改阴影大小。为了避免在阴影大小更改时移动视图,阴影大小由getMaxCardElevation()钳制。如果您希望动态更改标高,则应在CardView初始化时调用setMaxCardElevation(float)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34656252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档