Android 如何阻止三星S9边缘按钮周围DialogFragment背景的点击事件

Android 如何阻止三星S9边缘按钮周围DialogFragment背景的点击事件,android,Android,我有一个显示阻塞对话框片段的UI要求,不能通过单击后台来取消它。 此外,当显示DialogFragment时,无法单击其下的任何视图 除了在三星S9设备上,一切都很好。 在三星S9上,它有一个边缘按钮,当点击边缘按钮的边缘时,DialogFragment下的视图被点击,事件被执行,这与预期不同 下面是一个示例代码: public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bu

我有一个显示阻塞对话框片段的UI要求,不能通过单击后台来取消它。 此外,当显示DialogFragment时,无法单击其下的任何视图

除了在三星S9设备上,一切都很好。

在三星S9上,它有一个边缘按钮,当点击边缘按钮的边缘时,DialogFragment下的视图被点击,事件被执行,这与预期不同

下面是一个示例代码:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MyDialogFragment myDialogFragment = new MyDialogFragment();
            myDialogFragment.show(getSupportFragmentManager(), MyDialogFragment.TAG);

        }
    });

    findViewById(R.id.background).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e("wrong", "clicked!!!!---------------");
            Toast.makeText(MainActivity.this, "Click!", Toast.LENGTH_LONG).show();
        }
    });
}
}

布局非常简单,只是一个带有按钮的线性布局。 单击按钮将显示阻止对话框。 LinearLayout id为背景,显示对话框后不应单击背景

对话框代码:

公共类MyDialogFragment扩展了DialogFragment{ 公共静态最终字符串TAG=“Dialog”

}

但是现在,当对话框显示时,单击边缘按钮上的区域,可以输入背景click listener,我可以获取日志和土司。


如何防止这种情况?

可设置取消(false);可用于阻止在我要执行的事件中在任务完成之前单击后台

Fragment currentFrag = getSupportFragmentManager().findFragmentByTag(MyDialogFragment_TAG);
if (!(currentFrag instanceof MyDialogFragment))
{
  // your code for when you're dialog fragment is not visible
}
我已经设置了一个(参见onCreate中的代码)。它可以在其他设备上工作,但不能阻挡三星s9边缘按钮周围的触摸区域。
Fragment currentFrag = getSupportFragmentManager().findFragmentByTag(MyDialogFragment_TAG);
if (!(currentFrag instanceof MyDialogFragment))
{
  // your code for when you're dialog fragment is not visible
}