我为平板电脑开发了一个可调整大小的应用程序小部件。该应用程序小部件在大多数带有大多数启动器的设备上运行良好,但是方向存在一些问题,尤其是在纵向模式下的 GO-HD 启动器上。应用程序小部件的高度太大,看起来不太好。
为了解决这个问题,我创建了一种方法来允许用户在应用程序小部件空间中设置任何额外的边距,他想让它看起来不错。例如,当设备处于纵向模式时,他可以设置额外的 20 像素上边距,而在横向模式下则仅设置 5 像素等。
现在我正在创建一个活动来允许用户设置边距。我想制作一个小的预览区域(它将是一个具有相同背景可绘制应用程序小部件的线性布局),以便用户了解应用程序小部件在具有这些边距的主屏幕上的外观。其实我也这么做过,但结果与现实相差甚远。
所以我的问题是:
有什么方法可以获取启动器应用程序用于将应用程序小部件放置在主屏幕上的网格单元的大小(或接近它)?请注意,我知道并非所有启动器都遵循 Android 公式,但我想要的是找到一种方法来计算它的近似值。
- - 编辑 - -
为了更好地理解我的问题,我创建了一个屏幕截图:
首先,应用程序小部件的背景是一个形状 xml 文件,根本没有图形或尺寸。由 Android 将其绘制在可用空间中。在我看来这是最好的 GUI 设计(至少有背景)。现在,在屏幕 1 中,您可以在默认 Android 启动器中看到纵向模式的小部件,它看起来非常漂亮,并且正在重新调整大小。在屏幕 2 和 3 中,您可以在 GO-HD 启动器(横向和纵向模式)中看到它,在此启动器中,它在横向模式下看起来很小,在纵向模式下看起来很大。我可以通过让用户调整边距来解决这个问题,如屏幕 4 中所示。
如果您将预览(屏幕 4 中心的黑暗区域)与 Android 默认启动器中的原始应用程序小部件进行比较,您会发现没有很好的匹配。我要问的是如何向用户呈现更好的预览(最接近实际的应用程序小部件)。
谢谢你,请原谅我的英语
你实施了吗AppWidgetProvider.onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle)
?所有行为良好的启动器都应该报告一些有关您放置的小部件的指标,您可以使用以下代码从捆绑包中检索这些指标:
int minwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int maxwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
int minheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
int maxheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);
请注意,这里没有单元格的概念 - 这些指标对应于小部件的实际大小,无论它占用多少单元格。
Stock 启动器将它们映射到不同的方向,如下所示:
最小宽度 -> 纵向宽度
最小高度 -> 景观高度
最大宽度 -> 横向宽度
最大高度 -> 纵向高度
任何在两个方向上保持相同行数和列数并调整单元格大小以适合屏幕的启动器都应该以相同的方式映射它们。请注意,如果您嵌入的启动器对其小部件执行了一些不寻常的操作(仅将它们放置在屏幕的一部分中,或者在不同方向上使用不同数量的行或列),假设这些关系始终成立可能会产生不良结果。
或者,某些启动器可能会以最小值和最大值报告当前方向的指标,并在方向发生变化时用新指标再次呼叫您。但是,如果您只对当前方向感兴趣,这些启动器的行为与库存启动器的行为兼容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)