Android 删除对话框列表底部的空白

Android 删除对话框列表底部的空白,android,android-listview,android-alertdialog,Android,Android Listview,Android Alertdialog,我有它当你打开对话框窗口,有下面的5个选项空白。。。在Eclipse中的DumpView层次结构中,它说它是(2)FrameLayout[34894][6861022] 我的代码是: AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.sync_frequency); ListV

我有它当你打开对话框窗口,有下面的5个选项空白。。。在Eclipse中的DumpView层次结构中,它说它是(2)FrameLayout[34894][6861022]

我的代码是:

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();
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
builder.setTitle(R.string.sync_频率);
ListView ListView=新建ListView(getActivity());
字符串[]syncOptions=msyncopions;
ArrayAdapter modeAdapter=新的ArrayAdapter(getActivity(),android.R.layout.select_dialog_singlechoice,android.R.id.text1,syncOptions);
setSingleChoiceItems(modeAdapter,0,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
int selectedPosition=((AlertDialog)对话框).getListView().GetCheckEditePosition();
Log.d(标记“位置为”+所选位置);
}
});
builder.setView(listView);
setNegativeButton(R.string.sync_cancel,null);
最终对话框=builder.create();
dialog.getWindow().setLayout(LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
dialog.show();
我试图摆脱那里的空白……我不知道如何摆脱它。。。 我甚至尝试了
dialog.getWindow().setLayout(LayoutParams.WRAP\u内容,LayoutParams.WRAP\u内容)


但它并没有切断空间。我猜是因为它把它看成是一个框架而不是空白。谢谢

您是否尝试过将布局参数设置为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();
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
builder.setTitle(R.string.sync_频率);
ListView ListView=新建ListView(getActivity());
字符串[]syncOptions=msyncopions;
ArrayAdapter modeAdapter=新的ArrayAdapter(getActivity(),android.R.layout.select_dialog_singlechoice,android.R.id.text1,syncOptions);
setAdapter(modeAdapter,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.dismise();
}
});
setNegativeButton(R.string.sync_cancel,null);
最终对话框=builder.create();
dialog.show();

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

要使用没有空间问题的旧对话框主题,请按如下方式初始化AlertDialog.Builder:

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog));

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

我创建了一个ListView,并在调用builder.setView()之前,直接在其上设置适配器和OnListItemClickListener


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

它与您展示的第二部分一起工作!谢谢当他们单击时,我将如何获取选中的项目?我使用了int-selectedPosition=((AlertDialog)对话框).getListView().getCheckEditePosition();当我使用视图时,它返回所选的项目编号。我如何使用适配器获得它?谢谢无需担心,开关盒与int一起工作。再次感谢!它让我抓狂。int是您选择的项目:)它显示了我记忆中syncOptions阵列中的位置……除了与在10+设备上运行的应用程序的其余部分中使用的花色冲突。
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog));