X Tutup
Skip to content

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

Open
uniquext wants to merge 4 commits intoJavaNoober:masterfrom
uniquext:feature_tools_preview
Open

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

Conversation

@uniquext
Copy link

支持 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
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

X Tutup