我有一个UI要求显示一个阻塞的DialogFragment,这是不能通过点击背景而忽略的。另外,当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。单击按钮将显示阻塞对话框。LinearLayout id是背景,在对话框显示后不应该单击它。
对话框代码:
公共类MyDialogFragment扩展DialogFragment {公共静态最终字符串标记= "Dialog";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCancelable(false);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_dialog_layout, container, false);
getDialog().setCanceledOnTouchOutside(false);
return view;
}
@Override
public void onResume() {
Window window = getDialog().getWindow();
Point size = new Point();
Display display = window.getWindowManager().getDefaultDisplay();
display.getSize(size);
window.setLayout((int) (size.x * 0.8), WindowManager.LayoutParams.WRAP_CONTENT);
window.setGravity(Gravity.CENTER);
super.onResume();
}}
,但现在当对话框显示时,单击边缘按钮上的区域,可以输入后台单击监听器,我可以得到日志和土司。。
如何防止这种情况?
发布于 2019-05-28 20:04:42
如果我被解雇的话
Fragment currentFrag = getSupportFragmentManager().findFragmentByTag(MyDialogFragment_TAG);
if (!(currentFrag instanceof MyDialogFragment))
{
// your code for when you're dialog fragment is not visible
}发布于 2018-10-17 11:18:34
设置可取消(False);可用于阻止单击背景,直到任务完成。
https://stackoverflow.com/questions/52848980
复制相似问题