当我在KitKat中以编程方式setBackground()
尝试CardView
时遇到问题。当应用程序在Android L上运行时,我的代码中没有问题:
Drawable drawable = new BitmapDrawable(appContext.getResources(), bitmap);
if (cardView != null) {
cardView.setBackground(drawable);
}
但是当它在比Android L更早的API中运行时,我收到此错误:android.graphics.drawable.BitmapDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow.
我发现这是已知的问题,并且您可以将颜色设置为卡的背景,但有没有任何解决方案可以用编程方式为背景设置位图?您是否知道如何从我的RoundRectDrawableWithShadow
创建BitmapDrawable
?
答案 0 :(得分:2)
你知道如何从我的BitmapDrawable创建RoundRectDrawableWithShadow吗?
除非您希望重写自己的CardView
实施,否则不要这样做。
RoundRectDrawableWithShadow
是一个包私有类,用于获取由app:cardBackgroundColor
或setCardBackgroundColro(int)
提供的颜色并将其包装在带阴影的圆角矩形中以生成一个可绘制的。
由于在API 21中引入了提升,因此阴影被绘制为先前平台上可绘制的CardView
背景的一部分,因此您无法通过setBackground(*)
是否有任何解决方案可以用编程方式为背景设置位图?
您可以在卡片中放置View
,*Layout
等,并在其上设置圆形可绘制背景。但它在性能方面不会有效。
答案 1 :(得分:1)
所以是的,如果你绝对需要别的东西而不是纯色,那就去View.setBackground