1

在此处输入图像描述

当您打开对话框窗口时,我有它,在 5 个选项下方有这个空白区域......在 Eclipse 的 DumpView Hierarchy 内部,它说它是 (2) FrameLayout [34,894] [686,1022]。

我的代码是:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(R.string.sync_frequency);
                    ListView listView = new ListView(getActivity());
                    String[] syncOptions = mSyncOptions;
                    ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_singlechoice, android.R.id.text1, syncOptions);
                    builder.setSingleChoiceItems(modeAdapter, 0, new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                            int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
                            Log.d(TAG, "Position is " + selectedPosition);

                        }
                    });
                    builder.setView(listView);
                    builder.setNegativeButton(R.string.sync_cancel,null);
                    final Dialog dialog = builder.create();
                    dialog.getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
                    dialog.show();

我试图摆脱那里的空白空间......我不知道如何摆脱它......我什至尝试过dialog.getWindow().setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

但它并没有切断空间。我猜是因为它认为它是一个框架布局而不是空白。谢谢!

4

3 回答 3

2

您是否尝试过将布局参数设置为 listView(在膨胀为对话框之前)?

ListView listView = new ListView(getActivity());
listView.setLayout(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
.
.
.
builder.setView(listView);

另一种选择是不在对话框上使用 setView 而是使用 setAdapter() ,如下例所示:

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setTitle(R.string.sync_frequency);
    ListView listView = new ListView(getActivity());
    String[] syncOptions = mSyncOptions;
    ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_singlechoice, android.R.id.text1, syncOptions);
    builder.setAdapter(modeAdapter, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    builder.setNegativeButton(R.string.sync_cancel,null);
    final Dialog dialog = builder.create();
    dialog.show();
于 2013-07-11T17:33:50.693 回答
0

通过完全忽略它的 setAdapter(),我成功地删除了 AlertDialog 列表末尾的额外空间。

我创建了一个 ListView,并在其上直接设置 Adapter 和 OnListItemClickListener,然后使用它调用 builder.setView()。

我不知道为什么会这样,所以它可能会在其他设备上中断——希望不会是灾难性的。

于 2014-09-05T14:02:51.527 回答
0

这只发生在 API 级别 10+ 的设备上。

要使用没有这些空间问题的旧对话框主题,请像这样初始化您的 AlertDialog.Builder:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog));
于 2013-07-11T17:37:52.450 回答