3

appwidgetアプリケーションがあり、ユーザーが実行時に適用できるスキンを作成できるようにしたいと考えています。私の好ましい解決策は、ImageViewのウィジェットに合うように伸びる9つのパッチpng画像を含むapkファイルを使用することですが、別のパッケージ化手法(zipファイルなど)を使用する必要があるように見え始めます。

私が試したこと:context.getResourcesForApplication(my.app).getResources ...を使用して9つのパッチリソースをDrawableとしてインポートし、キャンバスを使用してそれらをビットマップに変換し、setImageViewBitapを使用してビットマップをRemoteViewに設定します。変換中に結果のビューのサイズ(myBitmap.setBounds(..、..))を指定する必要があり、アプリウィジェットの幅/高さの一部が修正されていないため、これは機能しませんでした。おそらく、私が逃した高さなどを取得する方法があります。

setImageViewUri()を使用してRemoteViewにリソースを直接インポートする関数がandroid.resource:// Uriを読み取っていないように見えるため、これは機能しません(ImageViewソースを調べたところ、ファイルのパスとコンテンツのみを読み取ったようです。 :// Uri's)

setImageViewResource()を使用してリソースをRemoteViewに直接インポートしますが、外部パッケージから取得したIDにパッケージ参照が含まれていないため、機能しませんでした。

私が避けようとしているのは、すべてのアプリウィジェットの幅と高さをハードコーディングするか、別のパッケージスキームを使用することです。

誰かがappwidgetスキンをうまく実装していて、知識を共有したいですか?あるいは、指摘できる穴が私のロジックのどこかにあるかもしれません。

現在ここにはコードがありませんが、必要に応じてコードを提供できます。

4

2 に答える 2

2

このサンプルソリューションを見つけましたhttp://www.siroccosoftware.com/devblog/?p=10

ImageView

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

views.setImageViewUri(ID, path); 

RemoteView

RemoteViews views = new RemoteViews("PACKAGE_NAME", "LAYOUT_RESOURCE_ID");
于 2012-03-22T15:37:24.340 に答える
1

この問題を修正しようとしているときに、ImageViewのコードに出くわしました。

URIが「コンテンツ」URIでない場合、ImageViewはへの呼び出しによってURIを開こうとしますDrawable.createFromPath(mUri.toString())。これは、基本的にURIではなくパスを必要とします。

URIの「file:///」セクションを削除すると、問題なく機能します。

したがって、次のようにコードを更新できます。

views.setImageViewUri(R.id.alarm, Uri.parse(f.getAbsolutePath()); 
于 2010-12-10T02:01:48.167 に答える