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

时间:2017-06-23 15:32:23

标签: android android-dialogfragment android-7.0-nougat dialogfragment multichoiceitems

我正在制作一个显示可选择的数据列表的自定义DialogFragment。列表太长,无法滚动显示在屏幕上。对于API 23,一切似乎都运行正常,但是当我在API 24+上进行测试时,DialogFragment的按钮不再可见。我查看Missing buttons on AlertDialog | Android 7.0 (Nexus 5x),但这似乎不适用,因为当我减少列表中的内容量时,我的按钮会显示,因此它们都适合屏幕。如何让我的按钮可见?

我的onCreateDialog()方法:

@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();
}

Buttons appear to be pushed off the screen

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

2 个答案:

答案 0 :(得分:0)

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

因为如果您的内容不适合屏幕,则将自定义视图和消息同时设置为警告对话框构建器会产生副作用。

要解决此问题,请将您的消息添加到自定义视图,并且不要使用setMessage()方法设置消息文本,对话框按钮将会显示。

希望这有帮助。

答案 1 :(得分:-1)

答案对我有用。 (我没有足够的积分来支持它,所以我只能使用新的答案。)特别是,我现在使用setTitle()而不是使用setMitage()。