横向き画面でウィジェットの表示を変更する

以前作ったAndroidアプリに対するコメントで、「IS01で見るとウィジェットの文字が切れています」というものがありました。
実機が無いのでとりあえずエミュレータで画面を横向きに設定して確認してみると、なるほど文字が切れている。
僕が作ったウィジェットのレイアウトはTextViewを4段表示しているのですが、画面を横にした場合、4段目が表示されていませんでした。
というわけでプログラムの修正。

AppWidgetProvider.onUpdate()でウィジェットの描画をしているので、そこで画面の向きを取得します。

int ori = context.getResources().getConfiguration().orientation;

値はと言うと

Configuration.ORIENTATION_LANDSCAPE:横長
Configuration.ORIENTATION_PORTRAIT:縦長
Configuration.ORIENTATION_SQUARE:正方形

というのがあるみたい。

で、横向きの時は4段表示を3段表示にしよう、ということで、TextViewの一つを非表示にする処理を追加しました。

ちなみに、AppWidget上のビューを更新する場合

textview.SetVisibility(View.GONE)

ではなく、RemoteViewsを使います。

RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.appwidgetlayout);
views.setInt(R.id.appwidget_label, "setVisibility", View.GONE);

setVisibility()はViewの表示、非表示を設定するもので、以下の設定が出来ます。

View.VISIBLE:Viewを表示する。
View.INVISIBLE:Viewを非表示にする。
View.GONE:Viewを非表示にし、レイアウトを詰める。

今回はView.GONEを設定することでTextViewを1段詰めるようにしました。

こんな感じで修正したところ、とりあえずちゃんと表示されるようになりました。

参考:
widgetを非表示にして詰める方法 - hyoromoのブログ
Mtk's Blog: [Android] 画面の回転に反応するウィジットアプリケーションを作るには