当我按Enter或屏幕上的任何其他位置时,如何失去对文本字段的关注?

时间:2018-02-09 13:20:54

标签: android

我的场景如下:我有一个搜索片段,在该片段中,我有3个文本字段(按名称搜索,按邮政编码和按距离搜索)。当焦点应用于"按名称搜索"字段,其他2个字段消失,所选字段的宽度增加。我的问题是我不能失去第一个字段的焦点,因此,在完成信息写入之后,我无法使用其他两个字段。

当我按下"输入"时,我正在寻找的是一种失去焦点的方法。或者当我按下屏幕上的任何其他位置而不是文本字段时。

这是我现在正在运行的代码:

final EditText searchByName = (EditText) getActivity().findViewById(R.id.search_by_name);
    final EditText searchByZipcode = (EditText) getActivity().findViewById(R.id.search_by_zipcode);
    final EditText searchByDistance = (EditText) getActivity().findViewById(R.id.search_by_distance);
searchByName.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
    /* When focus is lost check that the text field
    * has valid values.
    */
            if (hasFocus) {
                searchByName.getLayoutParams().width=900;
                searchByZipcode.setVisibility(View.INVISIBLE);
                searchByDistance.setVisibility(View.INVISIBLE);
            } else {
                searchByName.getLayoutParams().width=405;
                searchByZipcode.setVisibility(View.VISIBLE);
                searchByDistance.setVisibility(View.VISIBLE);
            }
        }
    });

    searchByZipcode.setOnFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
    /* When focus is lost check that the text field
    * has valid values.
    */
            if (hasFocus) {
                searchByZipcode.getLayoutParams().width=700;
                searchByName.setVisibility(View.INVISIBLE);
            } else {
                searchByZipcode.getLayoutParams().width=240;
                searchByName.setVisibility(View.VISIBLE);
            }
        }
    });

1 个答案:

答案 0 :(得分:1)

在您的活动类中,添加以下方法,它将适用于您。它将隐藏键盘并将在您外面的任何位置清除焦点,点击它将起作用。

  @Override
    public boolean onTouchEvent(MotionEvent event) {

        InputMethodManager imm = (InputMethodManager) getSystemService(Context.
                INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }