如何获得锁屏小部件区域的大小?

时间:2014-10-16 07:57:47

标签: android android-widget android-appwidget

在锁定屏幕上放置此小部件之前,是否有任何方法可以了解自动调整窗口小部件大小(以像素为单位) 例如,当我们在锁定屏幕上放置一个小部件时,然后开始配置活动以及此活动如何获得小部件的大小?

1 个答案:

答案 0 :(得分:0)

AFAICT,在用户将小部件放置在(锁定或主屏幕)屏幕上之前,应用无法确定小部件的大小。即使这样,操作系统返回的尺寸为范围 [为什么?],当然用户可以调整窗口小部件的大小。

E.g。将此调试代码添加到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模拟器上运行,新放置的主屏幕小部件以dp为单位报告:240 x 58 .. 302 x 84。这与<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之类的范围。

即使在锁定屏幕上,如果用户向下拖动屏幕小部件,小部件也可以从锁定键盘获取屏幕空间,但我不确定是否会更改这些最小/最大尺寸值。