(うまくいけば)比較的簡単な質問があります。AppWidgetで縦向きに使用するレイアウトと横向きに使用するレイアウトをAndroidに指示するにはどうすればよいですか?
前もって感謝します!
(うまくいけば)比較的簡単な質問があります。AppWidgetで縦向きに使用するレイアウトと横向きに使用するレイアウトをAndroidに指示するにはどうすればよいですか?
前もって感謝します!
まず、一部のホーム画面(Nexus Oneなど)は向きが変わらないことに注意してください。
向きごとに異なるレイアウトを使用するための標準的なアプローチは、縦向きのバージョンをにres/layout/
、横向きのバージョンをにres/layout-land/
、両方とも同じ名前(たとえば、appwidget.xml
)で配置することです。次に、名前(たとえばR.layout.appwidget
)でそれを参照するだけで、Androidは向きに基づいてファイルを選択します。これは間違いなくアクティビティで機能するので、アプリウィジェットでも機能すると思いますが、実際に試したことはないと思います。
アプリウィジェットの幅と高さを変更するには、レイアウトに2つの異なるサイズandroid:layout_height
とandroid:layout_width
サイズを定義します(res/layout-port
とでres/layout-land
)。次に、でより大きな幅と高さを定義しますappwidgetinfo.xml
。このように、ウィジェットをホーム画面に追加したときだけでなく、向きが変更されたときにアプリウィジェットのサイズが変更されます。
RemoteViewを使用してウィジェットを動的に更新している場合は、updateAppWidget関数呼び出しに2つの別々のRemoteViewを提供できます。例えば:
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
RemoteViews rvLandscape=new Remoteviews(context,R.layout.widget_landscape);
rvLandscape.addView(...
:
RemoteViews rvPortrait =new Remoteviews(context, R.layout.widget_portrait);
rvPortrait.addView(...
:
appWidgetManager.updateAppWidget(widgetId, new RemoteViews(rvLandscape, rvPortrait));
}