【发布时间】:2014-10-16 07:57:46
【问题描述】:
在将此小部件放置在锁屏上之前,是否有任何方法可以知道自动调整小部件大小(以像素为单位)? 例如,当我们在锁屏上放置一个小部件时,配置活动开始了,这个活动如何获得小部件的大小?
【问题讨论】:
标签: android android-widget android-appwidget
在将此小部件放置在锁屏上之前,是否有任何方法可以知道自动调整小部件大小(以像素为单位)? 例如,当我们在锁屏上放置一个小部件时,配置活动开始了,这个活动如何获得小部件的大小?
【问题讨论】:
标签: android android-widget android-appwidget
AFAICT,在用户将小部件放在(锁定或主)屏幕上之前,应用无法确定小部件的大小。即使这样,操作系统也会返回一个大小范围 [为什么?],当然用户可以调整小部件的大小。
例如将此调试代码添加到 AppWidgetProvider 的 onUpdate() 方法中:
Bundle newOptions = appWidgetManager.getAppWidgetOptions(appWidgetIds[0]);
int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int minHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
int maxWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
int maxHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
Log.i("getAppWidgetOptions", String.format(
"getAppWidgetOptions %d x %d .. %d x %d",
minWidth, minHeight, maxWidth, maxHeight));
在 Nexus 4 模拟器上运行,新放置的主屏幕小部件报告:240 x 58 .. 302 x 84 以 dp 为单位。这是<appwidget-provider> XML 设置:
android:minWidth="180dp"
android:minHeight="40dp"
android:minResizeWidth="180dp"
android:minResizeHeight="40dp"
AppWidgetProvider 可以通过覆盖onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) 来检测其小部件何时调整大小。使用与上述类似的代码[但省略了getAppWidgetOptions() 调用],它会记录240 x 58 .. 302 x 84 和(在手动将小部件拉伸得更宽之后)328 x 58 .. 408 x 84 等范围。
即使在锁定屏幕上,如果用户向下拖动小部件,它也可以从锁定键盘上占用屏幕空间,尽管我不确定这是否会改变这些最小/最大尺寸值。
【讨论】: