Android DialogFragment按钮按出屏幕API 24及更高版本

Android DialogFragment按钮按出屏幕API 24及更高版本,android,android-dialogfragment,android-7.0-nougat,dialogfragment,multichoiceitems,Android,Android Dialogfragment,Android 7.0 Nougat,Dialogfragment,Multichoiceitems,我正在制作一个自定义的对话框片段,它显示一个可选择的数据列表。列表太长,无法在屏幕上滚动显示。对于API 23,一切似乎都正常,但当我在API 24+上测试时,DialogFragment的按钮不再可见。我看了一下,但这似乎不适用,因为当我减少列表中的内容量时,我的按钮会显示出来,以便所有内容都显示在屏幕上。如何使我的按钮可见 我的onCreateDialog()方法: 如果需要更多信息,请告诉我。尽管示例代码没有使用它,但您是否碰巧使用了AlertDialog.Builder的setMess

我正在制作一个自定义的
对话框片段
,它显示一个可选择的数据列表。列表太长,无法在屏幕上滚动显示。对于API 23,一切似乎都正常,但当我在API 24+上测试时,DialogFragment的按钮不再可见。我看了一下,但这似乎不适用,因为当我减少列表中的内容量时,我的按钮会显示出来,以便所有内容都显示在屏幕上。如何使我的按钮可见

我的onCreateDialog()方法:


如果需要更多信息,请告诉我。

尽管示例代码没有使用它,但您是否碰巧使用了
AlertDialog.Builder的
setMessage()
方法来设置消息

因为,如果您的内容与屏幕不匹配,则同时将自定义视图和消息设置为警报对话框生成器会产生如您所述的副作用

要解决此问题,请将消息添加到自定义视图中,不要使用
setMessage()
方法设置消息文本,对话框按钮将可见

希望这有帮助

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final View dialogView = View.inflate(getContext(), android.R.layout.select_dialog_multichoice, null);

    builder.setView(dialogView)
            .setTitle(R.string.muscle_groups)
            .setMultiChoiceItems(Exercise.MUSCLE_GROUPS, selectionTrackingArray, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    ...
                }
            })
            .setPositiveButton(R.string.affirmative, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    ...
                }
            })
            .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });

    return builder.create();
}