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

387 阅读3分钟

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

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

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

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

报错的地方如图所示:

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

这里就是疑似有问题的代码了

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

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

例如这个:

说这里有个空指针 我们看下这里的代码 是啥

**

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

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

跟过去一看,这个函数里面 确实需要application的context,那怎么办? 没关系,我们判断一下如果是预览模式下 返回一个固定的值就可以了

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

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

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

要什么theme 给什么theme 即可

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

大概就是这些吧,剩下的 都是大同小异的一些改法了,大家尽快适配 新版本的android studio吧

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

其实主要还是为了 规范大家的自定义view写法,和 agp sdk lint 等升级一下 一堆报错一样, 是强制大家规范代码的一个手段。

另外大家也可以思考下,自己写的自定义view, 无法预览 是不是因为有些代码写的太耦合了,view 应该就做view的事,不应该和某些你自己的业务代码相关联, 相关联的时候 当你这个view 处于xml的预览环境 自然就容易出问题了