当我点击它时,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!
我遇到了几乎相同的事情。 据我所知,当焦点通过触摸事件从一个EditText移动到另一个EditText时,不会生成onFocusChange()。 也许@Overriding onTouch()可能有用吗? 不知道副手。
这是有问题的。 现在我们必须修改World\{EditText}的代码才能使一个edittext工作。 搞什么鬼...
这很简单。 您可以将以下内容放在LinearLayout或其他任何其他内容中:
android:focusableInTouchMode="true"
这是一个很好的答案。 我在RelitiveLayout中使用它,因此没有EditText始终具有焦点。+1
覆盖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);
}
这样,无论何时有人点击任何地方,您都可以控制,而且只有代码中的一个点。
必要时在根布局中添加android:focusableInTouchMode="true"
创建一个onClick侦听器,可能在您的XML布局中侦听后台LinearLayout中的点击。 在您将其作为您正在使用的活动的实例变量之后,您可以在EditText上调用.clearFocus()。
没有.cancelFocus()方法......
我想我的意思是.clearFocus()
您可以通过调用方法将焦点设置为其他字段来从EditText中删除焦点。
假设我在点击完成按钮时将焦点设置为后退按钮,然后在完成按钮单击侦听器内的后退按钮上调用方法。
而且你的问题已经解决了。
back.requestFocusFromTouch();