为EditText设置自定义Drawable背景后父RelativeLayout预览变灰
解决Android Studio设计预览中RelativeLayout变灰的问题
嘿,我刚好碰到过类似的预览渲染bug,来帮你搞定这个问题!
你遇到的核心问题是:给EditText设置自定义背景后,父RelativeLayout在设计预览里变成灰色,清理缓存后暂时正常,但修改视图就复发。这大概率是自定义Drawable的写法有问题,加上Android Studio预览的渲染缓存bug导致的。
第一步:修复自定义Drawable的语法问题
先看你的两个Drawable文件,有几处细节会触发预览异常:
1. 修正@drawable/edt_txt_bg的写法
你把xml命名空间放在了<item>标签里,而且用了负数边距,这会让预览引擎的布局计算出错。改成下面的规范写法:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="0dp" android:bottom="2dp" android:left="0dp" android:right="0dp"> <shape android:shape="rectangle"> <solid android:color="#ffffff"/> <stroke android:color="#1565C0" android:width="0.5dp"/> </shape> </item> </layer-list>
- 把
xmlns移到根标签<layer-list>里,这是XML的标准写法 - 去掉负数边距,改成
0dp,负数边距会让渲染引擎误判布局边界,导致父背景异常
2. 规范@drawable/edttxt_bg2的标签闭合
这个文件问题不大,只是标签闭合可以更整洁:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FAFAFA"/> <stroke android:color="#1565C0" android:width="0.5dp"/> </shape>
第二步:彻底清理预览缓存
如果修改Drawable后还是出现灰块,试试这波更彻底的操作:
- 关闭Android Studio
- 删除项目根目录下的
.idea文件夹和build文件夹 - 重新打开项目,点击顶部菜单栏的
File -> Sync Project with Gradle Files - 再点击
File -> Invalidate Caches...,选择Invalidate and Restart
为什么会出现这个问题?
Android Studio的设计预览对自定义Drawable的语法细节特别敏感,不规范的命名空间位置、负数边距这类写法,会让预览渲染引擎出现计算错误,导致父RelativeLayout的背景显示异常。清理缓存只是临时解决,但修改视图时预览重新渲染,就会再次触发这个bug,所以修复Drawable的写法才是根本解决办法。
内容的提问来源于stack exchange,提问作者jobin
相关产品推荐
相关产品推荐

