Skip to content

feat: 支持 Android Studio 布局预览功能#175

Open
uniquext wants to merge 4 commits into
JavaNoober:masterfrom
uniquext:feature_tools_preview
Open

feat: 支持 Android Studio 布局预览功能#175
uniquext wants to merge 4 commits into
JavaNoober:masterfrom
uniquext:feature_tools_preview

Conversation

@uniquext

Copy link
Copy Markdown

支持 Android Studio 布局预览功能

概述

本 PR 添加了 Android Studio 布局预览器(Layout Preview)的支持,使开发者可以在 IDE 中实时预览 bl_* 属性的效果,无需运行应用即可查看背景渲染结果。

与旧版预览方式的区别

对比项 旧版预览方式 新版预览方式
使用方式 必须将控件替换为自定义控件(如 BLTextViewBLButton 等) 只需切换 Theme 即可,无需修改布局中的控件
布局改动 需要修改 XML 中的控件标签 无需修改,保持原生控件标签
迁移成本 较高,需要逐个替换控件 极低,仅修改主题配置
兼容性 仅支持特定控件 支持所有 AppCompat 控件

新版预览方式的优势:相比旧版必须将控件替换为 BLTextViewBLButton 等自定义控件的方式,新版只需切换主题即可实现预览,无需修改布局文件中的任何控件标签,极大降低了使用成本和迁移难度。

主要变更

1. 新增自定义 ViewInflater

  • 新增 BackgroundViewInflater 类(分别支持 librarylibraryx 模块)
  • 通过继承 AppCompatViewInflater,在编辑模式下劫持视图创建过程,解析 bl_* 属性

2. 新增预览支持的自定义控件

  • BLAutoCompleteTextView
  • BLCheckedTextView
  • BLMultiAutoCompleteTextView
  • BLRatingBar
  • BLSeekBar
  • BLSpinner

3. 新增主题样式配置

  • 添加 styles.xml,配置主题以启用自定义 ViewInflater

4. Gradle 版本更新

  • 更新 Gradle Wrapper 版本以兼容最新开发环境

技术实现

通过自定义 AppCompatViewInflater 并在主题中配置 viewInflaterClass,当布局编辑器处于编辑模式时,自动注入背景解析逻辑,实现预览效果。

使用方式

在布局预览器中选择 Theme.BLTheme 主题(或在 AndroidManifest.xml / styles.xml 中配置),即可在布局预览器中看到 bl_* 属性的渲染效果。

注意事项

由于 Android Studio 布局预览器(Layout Preview)对全域名控件(如 androidx.appcompat.widget.AppCompatTextView)的处理局限性,该方法必须要先加载一个短域名的标准控件用以触发预览劫持(如 ViewLinearLayoutFrameLayout 等),在这之后渲染的控件才会自动预览生效。

建议:在布局文件顶部添加一个不可见的短包名控件作为触发器:

<View
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:visibility="gone" />
@uniquext

Copy link
Copy Markdown
Author

Theme.BLTheme 写错了,应该是 Theme.Background.Preview

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant