make editText失去了对背压的关注

在我的活动中,我有一个editText字段。 当用户点击它时,editText获得焦点并出现键盘。 现在,当用户按下电话上的硬件后退按钮时,键盘消失但光标仍保留在Edittext中,即它仍然具有焦点。 是否可以在按下后退按钮时使EditText失去焦点? 我尝试使用以下代码,但它不起作用:

@Override public void onBackPressed() { vibrator.vibrate(Constants.DEFAULT_VIBRATE_TIME); myEditText.clearFocus(); super.onBackPressed(); } 

只需扩展EditText:

 public class EditTextV2 extends EditText { public EditTextV2( Context context ) { super( context ); } public EditTextV2( Context context, AttributeSet attribute_set ) { super( context, attribute_set ); } public EditTextV2( Context context, AttributeSet attribute_set, int def_style_attribute ) { super( context, attribute_set, def_style_attribute ); } @Override public boolean onKeyPreIme( int key_code, KeyEvent event ) { if ( event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP ) this.clearFocus(); return super.onKeyPreIme( key_code, event ); } } 

在xml中只需使用而不是

注意:根据您支持的最小API,您可能需要向此类添加/删除构造函数。 我建议只添加它们并删除其super()调用以红色加下划线的那些。

您可以使另一个Views可聚焦,例如ImageView 。 确保使用setFocusableInTouchMode(true)使其在触摸模式下可聚焦,并使用onResume()将该ViewrequestFocus()

您还可以创建一个0维的虚拟View ,并执行上述相同的步骤。

我希望这有帮助。

添加以下高于EditText的视图:

  

另外要隐藏键盘在onBackPressed()中添加:

 ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(myEditText.getWindowToken(), 0); 

这可能是一个可能的解决方案:

 EditText et; et.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { if(i == KeyEvent.KEYCODE_BACK) { et.clearFocus(); return true; } else return false; } });