editText不会失去焦点

editText在我的应用程序中不会失去焦点,当我点击它时,它始终有橙色边框和黑色线条光标。根据此周围的editText,我做了一个LinearLayout:停止EditText从Activity获取焦点时启动所以它不会专注于应用程序的启动。

这是我的代码:

final EditText et = (EditText)findViewById(R.id.EditText01);

final InputMethodManager imm = (InputMethodManager) getSystemService(
   INPUT_METHOD_SERVICE);

et.setOnClickListener(new View.OnClickListener() {
   public void onClick(View v) {
      imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
   }
});

et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
   public void onFocusChange(View v, boolean hasfocus) {
      if(hasfocus) {
         imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT);
      } else {
         imm.hideSoftInputFromWindow(et.getWindowToken(), 0);
      }
   }
});

但是,当我点击editText之外的任何地方时,它似乎没有调用onFocusChange!


这很简单。 您可以将以下内容放入LinearLayout或其他任何其他文件中:

android:focusableInTouchMode="true"

覆盖Activity.dispatchTouchEvent()

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View view = getCurrentFocus();
        if (view != null && view instanceof EditText) {
            Rect r = new Rect();
            view.getGlobalVisibleRect(r);
            int rawX = (int)ev.getRawX();
            int rawY = (int)ev.getRawY();
            if (!r.contains(rawX, rawY)) {
                view.clearFocus();
            }
        }
    }
    return super.dispatchTouchEvent(ev);
}

这样,只要有人点击任何地方,你就可以控制,而且只有一个代码点。


创建一个onClick监听器,可能在您的XML布局中侦听背景LinearLayout中的点击。 从这里开始,你可以在你的EditText上调用.clearFocus() ,使其成为你正在工作的活动的一个实例变量。

链接地址: http://www.djcxy.com/p/4137.html

上一篇: editText is not losing focus

下一篇: How to remove focus from single editText