2010-02-12 96 views
3

我有一個appwidget應用程序,並希望使用戶能夠創建可在運行時應用的皮膚。我的首選解決方案是使用帶有9個patch png圖像的apk文件,這些圖像可以伸展以適應widget的ImageView,但是看起來我可能不得不使用另一種打包技術(例如zip文件)。尋找一個優雅的appwidget皮膚解決方案

我已經試過什麼: 導入9個補丁資源,可繪製與context.getResourcesForApplication(my.app).getResources ......,他們使用的帆布使用setImageViewBitap位圖轉換爲位圖和設置爲遠程視窗。 這沒有效果,因爲我需要在轉換過程中指定結果視圖(myBitmap.setBounds(..,..))的大小,並且我的appwidget中的某些寬度/高度不固定。也許有一種方法可以讓我錯過的高度等。

使用setImageViewUri() 直接導入資源到RemoteView這不起作用,因爲該函數似乎沒有讀取android.resource:// Uri的了(我在ImageView源代碼中搜索過,它似乎只是讀取文件路徑和內容:// Uri's)

使用setImageViewResource()將資源直接導入到RemoteView中,因爲從外部軟件包檢索到的ID顯然不包含軟件包引用,所以無法正常工作。

我想避免的是硬編碼所有我的appwidget寬度和高度,或使用單獨的打包方案。

有沒有人很好地實現了appwidget皮膚,並且想分享知識?或者,我的邏輯中可能會出現一個可以指出的地方。

如果需要,我可以提供代碼,但我現在沒有任何內容。

+0

薩姆嗨,你可以給我們更多的德關於內容提供商使用和尺寸問題的尾巴?或更好的代碼示例? 謝謝 – 2011-01-19 14:30:43

回答

2

我發現這個樣品溶液http://www.siroccosoftware.com/devblog/?p=10

ImageView的

Uri path = Uri.parse("android.resource://PACKAGE_NAME/RESOURCE_ID"); 

views.setImageViewUri(ID, path); 

遠程視窗

RemoteViews views = new RemoteViews("PACKAGE_NAME", "LAYOUT_RESOURCE_ID"); 
+0

感謝分享 – roflharrison 2012-03-26 02:30:57

1

我在嘗試解決此問題時遇到了ImageView的代碼。

事實證明,如果URI不是「內容」URI,則ImageView會嘗試通過調用Drawable.createFromPath(mUri.toString())來打開它,它基本上需要一個路徑而不是URI。

如果你去掉你的URI的「file:///」部分,它會工作得很好。

所以,你可以按以下步驟更新您的代碼:

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
+0

這將工作從SD設置圖像,但我不認爲它會延伸九個補丁,在你的測試嗎? – roflharrison 2011-08-18 04:14:13