如何在android中为除了屏幕上的元素之外的任何地方设置onClickListener

时间:2017-04-09 16:04:41

标签: java android onclicklistener

所以,我在Android中有一个活动,在操作栏上有一个附加按钮。

单击按钮时,会出现两个浮动操作按钮(一个用于图像,一个用于相机)。当我再次点击按钮时,它们会消失。

现在,我想这样做,如果用户点击屏幕上不是这两个FAB之一的任何地方,它们就会消失。我已经有了使它们消失的动作/命令;但是,我正在寻找如何为整个屏幕设置onClickListener,除了两个FAB覆盖的区域。

1 个答案:

答案 0 :(得分:0)

我解决了相同的情况,你可以将它与我的情景进行比较,并且可以适用于你的情况:

我的场景:在接触EditText的任何地方触摸屏幕时隐藏键盘。

解决方案:为非文本框视图设置触摸侦听器以隐藏键盘。

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

    setupUI(findViewById(R.id.scrolview)); // === scrolview is container of all views inside it ===

}

 public void setupUI(View view) {
    //Set up touch listener for non-text box views to hide keyboard.
    if(!(view instanceof EditText)) {
        view.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                hideSoftKeyboard(SignupActivity.this);

                findViewById( R.id.first_linear_layout ).requestFocus();

                return false;
            }

        });
    }
    //If a layout container, iterate over children and seed recursion.
    if (view instanceof ViewGroup) {

        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {

            View innerView = ((ViewGroup) view).getChildAt(i);

            setupUI(innerView);
        }
    }
}
 public static void hideSoftKeyboard(Activity activity) {
    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}