首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将单击事件阻止到三星DialogFragment边缘按钮周围的S9后台

如何将单击事件阻止到三星DialogFragment边缘按钮周围的S9后台
EN

Stack Overflow用户
提问于 2018-10-17 06:58:55
回答 2查看 379关注 0票数 1

我有一个UI要求显示一个阻塞的DialogFragment,这是不能通过点击背景而忽略的。另外,当DialogFragment显示时,不能单击它下面的任何视图。

除了三星的 S9设备外,的功能都很好。

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

下面是一个示例代码:

代码语言:javascript
复制
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";

代码语言:javascript
复制
@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();
}

}

,但现在当对话框显示时,单击边缘按钮上的区域,可以输入后台单击监听器,我可以得到日志和土司。

如何防止这种情况?

EN

回答 2

Stack Overflow用户

发布于 2019-05-28 20:04:42

如果我被解雇的话

代码语言:javascript
复制
Fragment currentFrag = getSupportFragmentManager().findFragmentByTag(MyDialogFragment_TAG);
if (!(currentFrag instanceof MyDialogFragment))
{
  // your code for when you're dialog fragment is not visible
}
票数 1
EN

Stack Overflow用户

发布于 2018-10-17 11:18:34

设置可取消(False);可用于阻止单击背景,直到任务完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52848980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档