You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅支持1x1、2x2等正方形尺寸的Android App Widget?

解决Android App Widget仅允许正方形尺寸调整的方案

1. 通过Widget配置Activity拦截尺寸调整

当用户尝试调整Widget大小时,系统会触发配置Activity(需提前配置),你可以在这里强制修正尺寸为正方形:

  • 在appwidget-provider的xml文件中添加android:configure属性,关联自定义配置Activity。
  • 在配置Activity中,通过AppWidgetManager获取用户当前选择的单元格尺寸。
  • 判断宽高对应的单元格数是否相等,若不等则强制将宽高统一为两者中的较大值(比如用户选2x1,就修正为2x2;选3x2则修正为3x3)。
  • 最后调用AppWidgetManager.updateAppWidget()方法应用修正后的尺寸配置。

2. 在AppWidgetProvider中强制修正尺寸

如果用户绕过配置界面调整尺寸,可在Widget的生命周期回调中检查并修正:

  • 重写AppWidgetProvider的onAppWidgetOptionsChanged()方法(该方法会在Widget尺寸变化时触发)。
  • 通过AppWidgetManager.getAppWidgetOptions(appWidgetId)获取当前尺寸参数,利用官方换算公式得到单元格数:单元格数 = (尺寸值 + 70) / 71。
  • 若宽高单元格数不等,计算目标正方形尺寸,构建新的Bundle设置修正后的宽高,再调用AppWidgetManager.updateAppWidgetOptions()更新。

3. 配合resizeMode优化调整体验

在appwidget-provider的xml中设置android:resizeMode="horizontal|vertical",允许双向调整的同时,配合上述两种方法实现强制正方形:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="70dp"
    android:minHeight="70dp"
    android:targetCellWidth="1"
    android:targetCellHeight="1"
    android:resizeMode="horizontal|vertical"
    android:configure="com.yourpackage.YourWidgetConfigActivity"
    ...>
</appwidget-provider>

注意:不同Launcher对Widget尺寸的处理存在差异,建议在主流Launcher(如Pixel Launcher、三星One UI等)上测试兼容性。

内容的提问来源于stack exchange,提问作者Cetin Yilmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:44:54