2013-02-28 70 views
3

我在设计中获取主屏幕小部件的大小时遇到​​了一些问题。我已经阅读了sdk文档并完成了一些搜索,但我并没有发现任何有用的东西。无论如何,我正在使用小部件提供程序的onAppWidgetOptionsChanged方法在API 16上的设备上获取小部件大小,并且它在某些设备上报告不正确。它在Nexus S和Transformer Prime上运行正常,但它在我的S3上的值比我从屏幕截图上测量的小。我已经说明了以dp而不是像素报道的事实。我猜测三星的发射器中增加了一些类型的保证金,但我找不到任何关联。例如,当我使用2x2小部件时,onAppWidgetOptionsChanged报告154dp(〜293px)宽度和193dp(〜355px)高度,但我在Photoshop中测量了〜340px〜420px。这是三星唯一的问题,还是我会在许多非香草平台上面对这个问题。代码是非常基本的,但我发布任何以防万一。Android应用程序小部件大小问题

@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以下的设备上,我只是将位图设置为widget信息xml中定义的minWidth和minHeight。在某些设备上,这会留下比我更喜欢的小部件更多的填充,但图像未失真。据我了解,在早期的设备中无法获得小部件的大小。另外,我不相信自定义字体可以在应用程序窗口小部件的TextView中使用。它是否正确?我曾尝试在图像上使用fitXY,但在某些设备上看起来很糟糕。是否有更多可预测的方式来完成自定义背景和自定义字体的小部件?任何建议将不胜感激。谢谢!

+0

我很确定没有可预测的方式来获取所有设备和发射器的尺寸。特别是三星TouchWiz有自己的填充规则。看看http://radleymarx.com/blog/app-widget-padding-margins-in-ics-android/ – 2013-08-05 12:44:37

回答

2

看起来我有samr问题。 Galaxy Note中的Widget 4 * 4。 onAppWidgetOptionsChanged返回426 * 384最大尺寸,但如果您在屏幕上看到的高度超过了宽度...

+3

感谢您的意见。你偶然看到maxWidth和maxHeight?如果是这样,我相当确定您需要查看给定屏幕方向的最大和最小尺寸。对于大多数设备,最大宽度和最小高度将用于横向模式,而最大高度和最小宽度将用于纵向模式。当我第一次尝试使用这种方法时,我犯了这个错误。 – BKW 2013-03-02 17:05:08