1

AppWidgetProvider で動的レイアウトを作成することは可能ですか? XML を使用してウィジェットを作成するためのチュートリアルしか見つかりませんでしたが、その方法でビューを作成することはできません..

次のように画像を連続して描画したい: http://imgur.com/7j18q そして、水平スクロールを追加します。出来ますか ?

よろしく!

編集:(これは私がこれまでに持っているものです..しかし、それらの画像を追加する方法はまだわかりません)

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    // TODO Auto-generated method stub
    super.onUpdate(context, appWidgetManager, appWidgetIds);
    final int N = appWidgetIds.length;
    for(int i = 0; i<N; i++){
        int awID = appWidgetIds[i];
        RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.about);
        try
        {
            j = 1;
            Set<User> users = LFMRestConnection.getFriendsNowListening(user, 1440);;
            for (User u : users) {
                album_pic = loadBitmap(u.getImageURL().getImageURL(ImageURL.Size.LARGE));
                resized_a_p = android.graphics.Bitmap.createScaledBitmap(album_pic, (50), (50), true);
            //URLS
                url_to_enter[j]=u.getLastTrack().getArtistName();
                track_to_enter[j]=u.getLastTrack().getTrackName();
            //profile picture
                user_pic = loadBitmap(u.getImageURL().getImageURL(ImageURL.Size.LARGE));
                resized_u_p = android.graphics.Bitmap.createScaledBitmap(user_pic, (25), (25), true);
                j++; 
            }
        }
        catch(Exception e)
        {
            //startActivity(i);
            System.out.println("widget error");     
        }
        appWidgetManager.updateAppWidget(awID, v);
    }
}
4

1 に答える 1

1

xml レイアウトで Horizo​​ntalScrollView を作成し、水平方向の LinearLayout を配置し、id 属性を設定してレイアウトに ID を付与します。

android:id="@+id/imageScrollLayout"

次に、アクティビティの onCreate で、レイアウト オブジェクトを見つけます。

LinearLayout imageScrollLayout = (LinearLayout)findViewById(R.id.imageScrollLayout); 

新しい ImageView をレイアウトに動的に追加するには、次を使用します。

ImageView newImageView=new ImageView();

//set the ImageView image with one of the following:
newImageView.setImageBitmap(bm);
newImageView.setImageDrawable(drawable);
newImageView.setImageResource(resId);

//add the new ImageView to your layout
imageScrollLayout.addView(newImageView);

ImageView のすべての xml 設定は、コードでアクセスできます。画像を設定した後に設定するだけです。Google Android のドキュメントは、関連するすべてのメソッドを見つけるのに非常に適しています。また、アクティビティの onCreate メソッド以外の場所に画像を追加する場合は、imageScrollLayout を onCreate メソッドのローカルではなくアクティビティのフィールドにして、どこからでもアクセスできるようにしてください。

編集: AppWidgetProvider でこれを実装するには、onUpdate メソッドをオーバーライドする必要があります。このメソッドは、システムがウィジェットの更新を要求するたびに呼び出されます。ウィジェットの RemoteViews を変更する必要がある場合は、ビューの新しいセットを作成し、次の方法でそれらをウィジェットにアタッチする必要があります。

appWidgetManager.updateAppWidget(componentName, remoteViews)

ここで、appWidgetManager は onUpdate メソッドに指定された引数です。同様のプロセスを onAppWidgetOptionsChanged() メソッドに実装する必要があります。remoteViews 引数を指定するには、何かを使用してコードでレイアウト ファイルを拡張します。

LayoutInflater myInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
final View myRootLayout = myInflater .inflate(R.layout.myLayout, null);

その後、通常の

myRootLayout.findViewById(R.id.myView);

レイアウトを見つけて ImageViews を追加します。

結局のところ、Horizo​​ntalScrollView は RemoteView としてサポートされていないため、必要な水平スクロールを実装するのが難しいのではないかと思います。AppWidget での水平スクロールはホーム画面間の水平スクロールではうまく機能しないため、これは Google による設計上の決定である可能性があります。画像の新しいページを表示するために、代わりに左端と右端のボタンを使用してください。

于 2012-08-28T14:01:03.283 に答える