editText is not losing focus
当我点击它时,editText没有失去焦点在我的应用程序中,它始终具有橙色边框和黑色线条光标..
我根据这个围绕editText做了一个LinearLayout:
停止EditText在Activity启动时获得焦点
因此它不会专注于应用程序的启动..
这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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或其他任何其他内容中:
1 | android:focusableInTouchMode="true" |
覆盖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | @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); } |
这样,无论何时有人点击任何地方,您都可以控制,而且只有代码中的一个点。
创建一个
您可以通过调用方法将焦点设置为其他字段来从EditText中删除焦点。
假设我在点击完成按钮时将焦点设置为后退按钮,然后在完成按钮单击侦听器内的后退按钮上调用方法。
而且你的问题已经解决了。
1 | back.requestFocusFromTouch(); |