Skip to content

Fix Android widget rendering on MIUI - #394

Open
quecai-niu wants to merge 2 commits into
TNT-Likely:mainfrom
quecai-niu:fix/android-widget-rendering
Open

Fix Android widget rendering on MIUI#394
quecai-niu wants to merge 2 commits into
TNT-Likely:mainfrom
quecai-niu:fix/android-widget-rendering

Conversation

@quecai-niu

Copy link
Copy Markdown

Summary

  • Reduce Android widget render pixel ratio to keep the bitmap small enough for RemoteViews updates.
  • Downsample widget bitmaps before passing them to RemoteViews.
  • Render the Android widget image full-height and fit it to the host bounds to avoid MIUI white/transparent letterboxing.

Verification

  • flutter pub get
  • flutter build apk --debug --flavor dev -t lib/main.dart
  • Previously verified the same widget rendering behavior on a Xiaomi 2211133C device: widget displayed, updated, and no longer showed transparent or white letterbox areas.

@TNT-Likely

Copy link
Copy Markdown
Owner

@quecai-niu #394 也拆得很干净 👍 MIUI 小组件渲染这块我完整看过,诊断和修法都对:

  • pixelRatio 4.0 → 1.5 + loadWidgetBitmap 降采样:对症——@4x 渲染出的 bitmap(364×182@4x ≈ 1456×728 ≈ 4MB)超过 RemoteViews / Binder 的传输上限,正是小米桌面小组件变透明的根因;降到 1.5x(~0.6MB)+ 解码降采样兜底能解决。
  • fitXY + 去 padding + 全高渲染:填满宿主、消除 letterbox 白边。
  • home_widget_view 去 padding 后用 Expanded 撑高,不会溢出;analyze 也没引入新问题。

功能上可以合。 两个小点供你判断(都不阻塞):

  1. fitXY 会拉伸变形:桌面把小组件拉成非 2:1 比例时,里面的收支数字 / 图标会被拉伸。这是「填满不留白」的代价(fitCenter 反之:不变形但留白),你注释里也提到了这个权衡——数字类内容轻微变形一般可接受,只是极端宽高比下会比较明显,知会一下。
  2. 暗色背景没接上:beecount_widget.xml 用的 @drawable/widget_background 是写死的浅灰 #F5F5F5,而项目里其实有一个 widget_background_dark.xml 没被用到(既没放进 drawable-night/、xml 也没引用)。暗色模式下这个打底色会始终是浅灰——不过 fitXY 填满时图片会盖住它,只在加载中 / 加载失败的瞬间露出,影响很小;顺手接一下暗色会更完整。

辛苦 🙏

1、接入小部件夜间模式背景资源
@quecai-niu

Copy link
Copy Markdown
Author

@TNT-Likely 感谢 review,暗色背景建议已处理并推送(8327ad7):

  • 将原先未使用的 drawable/widget_background_dark.xml 移到 drawable-night/widget_background.xml,现有 @drawable/widget_background 引用会在夜间模式下自动切换到暗色资源。
  • fitXY 暂时保留:我们接受极端宽高比下可能轻微拉伸的权衡,优先保证小米等桌面宿主填满且不再出现白边。

已通过 flutter build apk --debug --flavor dev -t lib/main.dart,辛苦再看一下 🙏

@TNT-Likely

Copy link
Copy Markdown
Owner

感谢 PR,也感谢你在小米设备上做的排查。不过维护者在实机(小米设备)测试当前这版后,发现修复实际效果是有问题的,想先和你对齐再继续:

实测两个问题

  1. 明显模糊:pixelRatio 从 4.0 降到 1.5 后,小组件整体发虚——虽然小组件尺寸不大,但在高分屏上文字和图形肉眼可见地糊,清晰度回退很明显。
  2. 白边并没有解决:fitXY + widget_background 这套改完之后,实机上白边/留白依然存在,原本的 letterbox 问题没根治,反而额外搭进去了清晰度。

所以这版的方向恐怕是错的:既降低了全局清晰度、又没真正消除白边。而且 pixelRatio/scaleType 都是全局改动,会影响所有设备(不止小米),代价偏大。

想请你补充几项信息,以便复现和定位真正根因

  1. 具体设备型号(如 Redmi Note xx / 小米 xx)+ 系统版本(MIUI / HyperOS 具体版本号);
  2. 修复前的原始问题截图——透明 / 白边当时到底长什么样;
  3. 复现时的小组件尺寸(2×2 / 4×2 等)和所用桌面/启动器

有了同款环境我们才能确认根因到底是 RemoteViews 位图大小上限、还是布局比例问题,从而找到不牺牲清晰度的正确修法。再次感谢你的贡献 🙏

@TNT-Likely

Copy link
Copy Markdown
Owner

@quecai-niu 补充维护者实机测试结果:在小米设备上,当前这版小组件明显模糊(pixelRatio 1.5 导致),而且白边依然存在、并没有解决原问题。这说明当前修复方向是错的——既牺牲了全局清晰度、又没根治 letterbox。

(维护者实拍截图稍后附上。)

烦请按上一条评论提供:设备型号 + 系统版本(MIUI/HyperOS)+ 修复前的问题截图 + 小组件尺寸,我们好在同款环境复现、找到不降清晰度的正确修法。谢谢!

@TNT-Likely

Copy link
Copy Markdown
Owner
image

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.

2 participants