0


Android13-EDLA GoogleDeskClock DigitalAppWidget显示不全问题

问题描述

Android13-EDLA项目中,因认证需求,APK的API必须支持到33,此前使用的Android原生的DeskClock无法满足API-33的要求;所以适配最新版本的GoogleDeskClock(支持API-33);适配后发现原先透明的时钟插件变成了白色背景,且UI显示不全。如下图所示;

Launcher3适配GoogleDeskClockleukemia参考 Android13 原生Launcher3兼容Google Deskclock
请添加图片描述


原因分析:

Android 12上Google时钟插件新增插件样式功能,可以设置为白色底和透明两种样式。默认白色底,设置为白色底时,若插件太小,UI 会显示不全;此前的原生DeskClock无此问题,且只有透明样式

解决方案:

1.按道理,因为插件小显示不全,只要把插件放大即可,此处的时钟插件大小为3×1,修改成3×2即可解决问题,但是因为3×2的时钟插件UI太大,不符合产品需求,所以此方案在这个项目中行不通。
如何修改时钟插件大小?可以在添加时钟插件的xml文件中修改大小;
例如我是在vendor\partner_gms\apps\GmsSampleIntegration\res_dhs_full\xml\partner_default_layout.xml 中添加的时钟插件。
<appwidget screen="0" x="2" y="1" packageName="com.google.android.deskclock" className="com.android.alarmclock.DigitalAppWidgetProvider" spanX="3" spanY="1"/>

此处的 spanX=“3” spanY=“1” 就是插件在桌面中的大小,spanX代表宽,spanY代表高

2.因为GoogleDeskClock无源码,无法通过修改样式源码来实现目的;但可以尝试 Overlay动态资源替换(RPO)方式来替换Google应用中的资源文件。
因为是桌面插件(小组件),插件提供者会在 appwidget-provider 中定义插件的布局、大小、 宽高、预览图片、更新间隔 等基本配置信息。Appwidget相关的知识这里不细说,可自行百度了解。参考 Android Widget 基础介绍以及常见问题

通过反编译GoogleDeskClock发现 digital_appwigget.xml 如下:

<?xml version="1.0" encoding="utf-8"?><appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:minWidth="@dimen/default_legacy_digital_widget_width"
    android:minHeight="@dimen/default_legacy_digital_widget_height" 
    android:updatePeriodMillis="0" 
    android:initialLayout="@layout/loading_widget" 
    android:previewImage="@drawable/appwidget_legacy_digital_clock_preview" 
    android:resizeMode="vertical|horizontal" 
    android:minResizeWidth="0dp" 
    android:minResizeHeight="0dp" 
    android:widgetCategory="keyguard|home_screen"/>
<dimen name="default_legacy_digital_widget_height">117dp</dimen><dimen name="default_legacy_digital_widget_width">203dp</dimen>

DigitalAppWidget 的 minWidth 为 203dp ,minHeight为117dp。

通过修改 default_legacy_digital_widget_height 和 default_legacy_digital_widget_width 实现放大DigitalAppWidget ;具体修改如下:
1. 在vendor\partner_gms\overlay目录下新增DeskClockGoogleOverlay,内容如下

在这里插入图片描述

res 是需要替换的资源文件
在这里插入图片描述

dimens.xml

<?xml version="1.0" encoding="utf-8"?><resources><dimen name="default_legacy_digital_widget_height">240dp</dimen><dimen name="default_legacy_digital_widget_width">500dp</dimen><dimen name="default_digital_widget_height">240dp</dimen><dimen name="default_digital_widget_width">500dp</dimen></resources>

Android.bp 文件如下:

runtime_resource_overlay {
    name:"DeskClockGoogleOverlay",
    resource_dirs:["res"],
    vendor:true,
    sdk_version:"current",}

AndroidManifest.xml 如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.google.android.deskclock.overlay"
    android:versionCode="1"
    android:versionName="1.0"><application android:hasCode="false"/><overlay android:targetPackage="com.google.android.deskclock" android:priority="1" android:isStatic="true"/></manifest>

package 定义包名,一般命名为目标的apk包名.overlay
targetPackag为目标包名; android:priority 优先级

2. 另外还需要添加预编译,vendor\partner_gms\products\gms.mk 新增 DeskClockGoogle
# DeskClockGoogleRRO packages
PRODUCT_PACKAGES+=DeskClockGoogleOverlay
3. 测试发现, DigitalAppWidget无法通过 minWidth 和 minHeight随意放大,可能是桌面行高和列宽限制,具体原因暂不明确。在12小时制时插件字体仍会贴边显示,所以设置默认24小时。

frameworks/base/packages/SettingsProvider/res/values/defaults.xml

+<string name="time_12_24" translatable="false">24</string>

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

loadIntegerSetting(stmt,Settings.System.POINTER_SPEED,R.integer.def_pointer_speed);++//defect 24+loadStringSetting(stmt,Settings.System.TIME_12_24,R.string.time_12_24);/*
              * IMPORTANT: Do not add any more upgrade steps here as the global,
4. 最终修改效果

在这里插入图片描述


总结

  1. 无源码且需要修改资源的情况下可以使用Overlay动态资源替换(RPO)方式实现,
  2. 此问题中DigitalAppWidget的宽度改变很小,无法随意设置大小,如果有更好的方式,欢迎一起交流讨论。
  3. 此解决方案可能只适用本项目,若有更好的方式,欢迎指教。

参考

Android Widget 基础介绍以及常见问题
Android Overlay动态资源替换(RPO)踩坑日记
android overlay app,修改字符串资源
Launcher插件显示被截断

标签: Android Framework

本文转载自: https://blog.csdn.net/qq_25283407/article/details/135472700
版权归原作者 五八哥 所有, 如有侵权,请联系我们删除。

“Android13-EDLA GoogleDeskClock DigitalAppWidget显示不全问题”的评论:

还没有评论