我正在为棒棒糖和以前的版本开发一个Android应用程序。
我使用CardView (这个cardView没有任何子级,它只是放在我的视图后面)来创建阴影。
但当它在pre Lollipop设备上运行时,问题就出现了。
因此,我将cardUseCompatPadding设置为true。我想知道这个软垫的价值是多少?
有没有什么地方可以找到这个值的引用?
发布于 2016-01-07 22:12:53
添加到CardView的复合填充取决于已设置的角点的标高和半径。您可以在support库中的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);发布于 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)。
https://stackoverflow.com/questions/34656252
复制相似问题