CardView兼容问题
来源:互联网 发布:现在开淘宝卖什么好卖 编辑:程序博客网 时间:2024/06/07 20:10
概述
开发中以前用的编译版本是23,最近升级到了25.3.0,于是就出现了这个蛋疼的问题。java.lang.NoSuchMethodError: android.support.v7.widget.CardView.setShadowPadding
问题分析:
出现这个问题的人必然是发现使用过了CardView 在LOLLIPOP版本以下出现的兼容性问题,导致了阴影部分出现了很大的间隙。想要手动的取消或者减小这个间隙。如下图:
CardView 是LOLLIPOP之后出现的新控件,主要效果就是阴影,原理是21之后图层引入了Z轴的概念,但是21之前的版本没有Z轴的概念,于是Google就通过shadowBound 空出一块区域来绘制阴影。
19版本下的阴影
23版本下的阴影
看一下源码发现
25的编译版本
private final CardViewDelegate mCardViewDelegate = new CardViewDelegate() { ... @Override public void setShadowPadding(int left, int top, int right, int bottom) { mShadowBounds.set(left, top, right, bottom); CardView.super.setPadding(left + mContentPadding.left, top + mContentPadding.top, right + mContentPadding.right, bottom + mContentPadding.bottom); } ...}
21的编译版本
** * Internal method used by CardView implementations to update the padding. * * @hide */ @Override public void setShadowPadding(int left, int top, int right, int bottom) { mShadowBounds.set(left, top, right, bottom); super.setPadding(left + mContentPadding.left, top + mContentPadding.top, right + mContentPadding.right, bottom + mContentPadding.bottom); }
看到了,高版本的setShadowPadding被隐藏到一个内部类里面了,用CardView是不能直接调用的,其实一早也就给了hide标记
解决办法:设置负的margin抵消ShadowPadding
1 在value的dimens 里面定义边距为-4dp
2 新建value-21在dimens里面定义边距为0
android:layout_marginLeft="-4dp"
尝试过反射设置mShadowBounds;重新兴建一个阴影图层等方法之后发现,设置margin最简单,新建阴影图层方法效果好,但是有间隔
大神们推荐的解决方案是设置margin:https://android.jlelse.eu/using-full-width-cards-to-maximize-content-f739cb863ce8
注意:CardView还有一个坑,在21以上的版本,设置ShadownPadding 同为4dp ,在同一个View,最上面的CardView显示的是4dp的阴影,但是最下面的CardView你会看到他的阴影要比4dp大。 如果你是ScrollView这种滚动布局的话,在滚动过程中 你会看到这个阴影会发生变化,具体原因Google上说是CardView自身问题,我也还没有找到解决办法,希望有发现的朋友能够分享下解决经验
- CardView兼容问题
- CardView
- CardView
- CardView
- CardView
- cardview
- CardView
- CardView
- CardView
- CardView
- cardview
- cardview
- CardView
- CardView
- CardView
- CardView
- CardView
- CardView
- UML用例图
- Android 类似Ios的相册
- 省市县三级级联
- 蓝桥杯 第六届决赛 生成回文数 JAVA
- Java中有两种实现多线程的方式以及两种方式之间的区别
- CardView兼容问题
- tomcat启动报错org.apache.catalina.core.StandardContext listenerStart
- linux下用语言连接sqlite数据库
- 欢迎使用CSDN-markdown编辑器
- 使用Thinkphp框架开发移动端接口(1)
- 关于拼接SQL语句sqlMap的使用方法
- iOS第三方库-CocoaLumberjack-DDLog 使用
- 自学h5 来看看项目常见问题汇总及解决方案
- 企业支付宝账号开发接口教程--JAVA-UTF-8