我在设计一个主屏幕小部件时遇到了一些问题,我正在尝试获取它的大小。我已经阅读了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与图像,但在某些设备上看起来很糟糕。有没有更可预测的方法来实现自定义背景和自定义字体的小部件?任何建议都将不胜感激。谢谢!