ダイアログに が含まれている場合、ダイアログの幅に問題がListView
あります。ダイアログは常に画面の幅をほぼ埋め尽くします。問題の例を次に示します。
アイコンに合わせてダイアログの幅が必要です。hereおよびhereで説明されているように、ダイアログスタイルをいじってこれを修正しようとしましたが、役に立ちませんでした。これらのスレッドは (少なくともこの問題では) 間違った方向に進んでいると思います。なぜなら、(1) 問題を解決できず、(2) ListView
. たとえば、ListView
を単純なTextView
もの (詳細は以下) に置き換えると、すべてのサイズが希望どおりになります。
ダイアログを表示するために使用しているコードは次のとおりです。
private void showDisplayStyleDialog(int id, int choices, int values) {
final Dialog dlg = new Dialog(this);
dlg.requestWindowFeature(Window.FEATURE_NO_TITLE);
dlg.setContentView(R.layout.display_style_dialog);
final ListView lv = (ListView) dlg.findViewById(android.R.id.list);
if (lv != null) {
displayStyleAdapter.setChoices(choices, values);
lv.setAdapter(displayStyleAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long itemId) {
dlg.dismiss();
setDisplayStyle(DisplayStyle
.valueOf(displayStyleAdapter.mValues[position]));
}
});
}
dlg.setCanceledOnTouchOutside(true);
dlg.show();
}
を使用してダイアログを作成しようとしましたがAlertDialog.Builder
、改善はありませんでした。ダイアログのレイアウト ( display_style_dialog.xml
) は次のとおりです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white" >
</ListView>
</LinearLayout>
アダプターは、このレイアウトからすべての行をロードします。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="5dp" >
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/display_style_image_bg"
android:contentDescription="@string/cd_display_style" />
</LinearLayout>
Android Debug Monitor でビュー階層を調べると、ListView
それ自体だけがダイアログの全幅であることがわかります。各行は(必要に応じて)アイコンの幅に合わせてサイズ調整されます。ListView
幅広い対話を強制しているのはそれ自体です。私が変更display_style_dialog.xml
した場合:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test_string"
android:textColor="@android:color/black"
android:background="@android:color/white" >
</TextView>
</LinearLayout>
コードやリソースに他の変更を加えない場合、結果は上記のコンパクトなダイアログになります。私が知る限り、問題は厳密にListView
はダイアログ内の の存在によるものです。
ImageView
a の中に a のVerticalLayout
中に多数の を配置することで、短期的にはこれを回避できると思いますScrollView
。残念ながら、アイコンの配置と数はアプリの内部状態によってかなり異なるため、これは持続可能なアプローチではありません。長期的には、本当にListView
. この問題を解決する方法についてのアイデアはありますか?