前不久晋级了Android Studio Dolphin 版别,其时发现 xml布局无法预览,那会没当回事,感觉估量是google 写了一个bug,等一下后续的patch 就可以自动修复, 结果今天更新了 patch1 发现bug 还在,其时觉得应该就不是简简单单的bug问题了, 应该是 谷歌单纯的 修改了xml 布局的预览规矩, 应该是咱们某些当地不符合这些规矩导致的

没办法那就定位问题看看,如何解决

首先确定的是,不是所有xml布局都无法预览,而是部分含有自定义view的布局无法预览

这就奇怪了,为啥谷歌的自定义view 比如RV 束缚布局可以支持预览?咱们自己项目内的就不可?

报错的当地如图所示:

Android Studio Dolphin  Xml 布局 无法预览解决方案

留意了 这儿明显有一个 -1 的提示,还有一个style的提示 咱们转到对应的 view代码里去看看

Android Studio Dolphin  Xml 布局 无法预览解决方案

这儿便是疑似有问题的代码了

修复起来其实不难,只要按照标准的自定义写法即可

Android Studio Dolphin  Xml 布局 无法预览解决方案

再看看其他无法预览的布局

例如这个:

Android Studio Dolphin  Xml 布局 无法预览解决方案

说这儿有个空指针 咱们看下这儿的代码 是啥

private final static int DEFAULT_NORMAL_MAX_WIDTH = BaseApplication.getApplication().getResources().
getDimensionPixelOffset(R.dimen.dp247); 

这就奇怪了,这儿便是一个 简单的 dp转px 为啥会空指针呢,application还能为空? 其实也是可能的啊, 你想想布局的预览其实 并不在一个实在的android环境里,这儿当然是有可能为null的, 这儿就不得不联想到compose的布局预览, 那个才叫实在的布局预览呀,我们有条件赶忙转吧

回到主题中来,咱们这个其实细心考虑一下 既然都是自定义view 了,没必要获取applicaton的context 略微改一下代码就行了, 改完以后再build

Android Studio Dolphin  Xml 布局 无法预览解决方案

发现仍是报错, 心态崩了,

跟过去一看,这个函数里边 的确需要application的context,那怎样办? 没关系,咱们判别一下如果是预览模式下 回来一个固定的值就可以了

Android Studio Dolphin  Xml 布局 无法预览解决方案

再看看,诶,怎样还有的布局无法预览? 看看报啥错?

Android Studio Dolphin  Xml 布局 无法预览解决方案

完蛋了,这次报错的怎样是个谷歌的自定义view? 谷歌也错了吗? 其实细心看这个报错信息 他是说这个view 需要一个指定的theme

在这儿调整一下布局theme即可:

Android Studio Dolphin  Xml 布局 无法预览解决方案

要什么theme 给什么theme 即可

Android Studio Dolphin  Xml 布局 无法预览解决方案

改一下,布局即可正常预览

大概便是这些吧,剩余的 都是迥然不同的一些改法了,我们尽快适配 新版别的android studio吧

最终咱们可以想一想, 谷歌为啥在新版别的studio 强校验了自定义view的 xml布局预览?

其实主要仍是为了 标准我们的自定义view写法,和 agp sdk lint 等晋级一下 一堆报错相同, 是强制我们标准代码的一个手法。

别的我们也可以考虑下,自己写的自定义view, 无法预览 是不是由于有些代码写的太耦合了,view 应该就做view的事,不应该和某些你自己的业务代码相关联, 相关联的时分 当你这个view 处于xml的预览环境 自然就容易出问题了

最终 生命苦短 用compose吧。。。。