Jus*_*ous 40 android focus android-edittext
我只想在"edittext"外单击时自动失去焦点并隐藏键盘.目前,如果我点击"edittext"它会聚焦,但我需要点击后退按钮来取消聚焦.
Sud*_*aur 22
要解决此问题,您需要首先使用该Edittext的setOnFocusChangeListener
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
Log.d("focus", "focus lost");
// Do whatever you want here
} else {
Log.d("focus", "focused");
}
}
});
Run Code Online (Sandbox Code Playgroud)
然后你需要做的是覆盖包含Edittext的活动中的dispatchTouchEvent,见下面的代码
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if ( v instanceof EditText) {
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
Log.d("focus", "touchevent");
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
现在会发生什么事情,当用户点击外面时,首先调用dispatchTouchEvent,然后从editext清除焦点,现在你的OnFocusChangeListener将被调用焦点已被更改,现在你可以做任何你想做的事情,希望它有效:)
lyn*_*ilu 18
@woodshy有隐藏键盘的答案,但也许放入代码onClick不如放入键盘onFocusChanged.至于强制它失去焦点,您需要在其XML文件中设置要将焦点转移到的对象:
android:focusable="true"
android:focusableInTouchMode ="true"
Run Code Online (Sandbox Code Playgroud)
woo*_*shy 14
假设您的EditText放置在线性布局或其他ViewGroup上.然后你应该使这个容器可点击,可聚焦和focusableInTouchMode.之后使用onClick Override方法将onClickListener设置为此容器,并使用以下代码:
@Override
public void onClick(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37458 次 |
| 最近记录: |