【问题标题】:How get size of lockscreen's widget area?如何获取锁屏小部件区域的大小?
【发布时间】:2014-10-16 07:57:46
【问题描述】:

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

【问题讨论】:

    标签: android android-widget android-appwidget


    【解决方案1】:

    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 等范围。

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

    【讨论】:

    • 是的。恐怕你是对的。无法获取锁屏小部件区域的大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2021-09-10
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    相关资源
    最近更新 更多