AlertDialog-构建它的正确方式,现在眨眼并轻弹打开

xfb7svmp  于 2022-09-21  发布在  Android
关注(0)|答案(2)|浏览(152)

在我的项目中,我使用一个简单的AlertDialog来输入一些信息。我的问题是,当我打开这个AlertDialog时,我有一个非常短的时间闪烁,这是不正确的。我想知道我错在哪里,最重要的是,构建它的正确方法应该是什么,因为我找不到解决方案,如果不是改变对象的解决方案。但我真的需要AlertDialog

private void insertNameManually(String hint, int mType) {
    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
    LayoutInflater inflater = this.getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.alert_dialog, null);
    EditText editText = dialogView.findViewById(R.id.editTextName);
    Button clearTextButton = dialogView.findViewById(R.id.clearText);
    Button confirmButton = dialogView.findViewById(R.id.confirmButton);
    dialogBuilder.setView(dialogView);
    dialogBuilder.setTitle(R.string.std_choose);
    confirmButton.setOnClickListener(v -> {

        name = editText.getText().toString();

        name = hint;
        new Handler().postDelayed(() -> {
            MyFragment.this.type = mType;
            Intent data = new Intent();
            data.putExtra("type", type);
            activity.setResult(Activity.RESULT_OK, data);
            activity.finish();
        }, 275);
    });

    editText.setText(hint);

    clearTextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            editText.setText("");
        }
    });

    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();
}
dpiehjr4

dpiehjr41#

**解决方案:**您可以尝试向警报对话框添加标志WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;

您可以尝试通过切换到DialogFragment可以帮助消除闪烁。

提示:只想通过查看您的代码来添加此处,而不是

AlertDialog alertDialog = dialogBuilder.create();
  alertDialog.show();

您可以这样做,将创建并显示警报对话框。

dialogBuilder.show();
ql3eal8s

ql3eal8s2#

我也遇到过类似的问题。我有一个DialogFragment和一个TextInputLayout,充当一个按钮。按下后,它会显示AlertDialog窗口,该窗口在打开时会闪烁。

在网站上的某个地方(对不起,忘记了来源)我发现了为什么对话框闪烁的提示-我相信这是因为DialogFragmentAlertDialog在显示时都设置了暗淡的背景。

对我有效的解决方案是禁用AlertDialog的调光。基本FragmentDialogFragment之间的背景仍然变暗,但DialogFragmentAlertDialog之间的背景不变暗。这可能是一个理想的效果,也可能不是,在我的情况下,它是好的。

要消除上述变暗效果,需要清除窗口的FLAG_DIM_BEHIND标志。就在我展示对话之前,我正在做这件事。

Java:

AlertDialog alertDialog = dialogBuilder.create();
  alertDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHI‌​ND);
  alertDialog.show();

Kotlin:

val dialog = builder.create()
  dialog.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
  dialog.show()

相关问题