我在获取我正在设计的主屏幕小部件的大小时遇到了一些问题。我已经阅读了 sdk 文档并进行了一些搜索,但我并没有真正找到任何有用的东西。无论如何,我正在使用小部件提供程序的 onAppWidgetOptionsChanged 方法来获取 API 16 以上设备上的小部件大小,并且它在某些设备上报告不正确。它在 Nexus S 和 Transformer Prime 上运行正常,但它在我的 S3 上给出的值小于我从屏幕截图中测得的值。我已经解释了它以 dp 而不是像素报告的事实。我猜三星的启动器会添加某种类型的边距,但我找不到任何相关性。例如,当我使用 2x2 小部件时,onAppWidgetOptionsChanged 报告 154dp (~293px) 宽度和 193dp (~355px) 高度,但我在 Photoshop 中测量了约 340 像素 x 420 像素。这是三星唯一的问题,还是我要在许多非香草平台上面对这个问题。该代码非常基本,但我发布任何以防万一。
@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 中定义的 minWidth 和 minHeight。在某些设备上,这会在小部件周围留下比我更喜欢的填充,但图像不会失真。据我了解,无法在早期设备中获取小部件大小。另外,我不相信自定义字体可以在应用小部件的 TextView 中使用。这个对吗?我曾尝试将 fitXY 与图像一起使用,但它在某些设备上看起来很糟糕。有没有更可预测的方式在小部件上完成自定义背景和自定义字体?任何建议将不胜感激。谢谢!