2013-02-28 144 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