Android应用程序小部件尺寸问题

4
我在设计一个主屏幕小部件时遇到了一些问题,我正在尝试获取它的大小。我已经阅读了sdk文档并进行了一些搜索,但是没有找到有用的信息。无论如何,在API 16以上的设备上,我使用小部件提供程序的onAppWidgetOptionsChanged方法来获取小部件的大小,并且在某些设备上报告不正确。它在Nexus S和Transformer Prime上正常工作,但是在我的S3上给出的值比我从截图中测量的值要小。我已经考虑到它是以dp而不是像素报告的事实。我猜测三星的启动器添加了某种类型的边距,但我找不到任何相关性。例如,当我使用2x2小部件时,onAppWidgetOptionsChanged报告154dp(~293px)的宽度和193dp(~355px)的高度,但是我在Photoshop中测量的大小为约340px乘420px。这是仅限于三星的问题,还是我将在许多非原生平台上面临这个问题。代码很基本,但我还是把它贴出来了。
@Override
public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) {
    int minWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
    int maxWidth = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
    int minHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
    int maxHeight = newOptions.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);

    Log.i("WidgetProvider","Widget size changed");
    Log.i("WidgetProvider","minWidth: " + minWidth);
    Log.i("WidgetProvider","minHeight: " + minHeight);
    Log.i("WidgetProvider","maxWidth: " + maxWidth);
    Log.i("WidgetProvider","maxHeight: " + maxHeight);
}

我正在使用报告的尺寸在我的小部件更新服务中生成位图。我需要使用自定义位图,因为我想要使用自定义字体和背景来制作我的小部件。在API 16以下的设备上,我只需将位图设置为小部件信息xml中定义的最小宽度和最小高度。在某些设备上,这会留下比我希望的更多填充物周围的小部件,但是图像没有失真。据我了解,在早期的设备上无法获取小部件的大小。此外,我不认为可以在应用程序小部件的TextView中使用自定义字体。这正确吗?我尝试使用fitXY与图像,但在某些设备上看起来很糟糕。有没有更可预测的方法来实现自定义背景和自定义字体的小部件?任何建议都将不胜感激。谢谢!


我相信在所有的设备和启动器中,没有可预测的获取大小的方法。特别是,三星TouchWiz在填充方面有它自己的规则。请查看http://radleymarx.com/blog/app-widget-padding-margins-in-ics-android/。 - Jose_GD
1个回答

2

看起来我有相同的问题。在 Galaxy Note 上,4*4 的小部件。在 onAppWidgetOptionsChanged 中返回的最大尺寸为 426*384,但如果您查看屏幕,则高度大于宽度...


5
感谢您的输入。您是否同时关注了maxWidth和maxHeight?如果是这样,我非常确定您需要查看给定屏幕方向的最大和最小尺寸。对于大多数设备,在横屏模式下将使用最大宽度和最小高度,而在竖屏模式下将使用最大高度和最小宽度。当我开始尝试使用这种方法时,我也犯了这个错误。 - BKW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接