我一直在网上看了一段时间,以确保这里没有其中一个,但由于某种原因我似乎无法找到完成这项工作的确切方法,经过4个小时的尝试我想通了我会问专家。
我现在有了我的班级,假设在加载窗口时有一个onFocusChangeListener,当我点击我的背景时会触发该窗口,导致软键盘被隐藏。
所以缺点是:当我点击我的背景并隐藏键盘时,如何修复我的课程。
到目前为止,这是我的代码:(请记住,我的布局既可关注又可点击)
package com.example.haymaker;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class addAppointment extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.appointment);
final EditText appointmentName = (EditText) findViewById(R.id.editText1);
appointmentName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(appointmentName.getWindowToken(), 0);
}
}
});
}
}
感谢您的协助
答案 0 :(得分:0)
这有点不寻常,android模式通常是让用户使用后退按钮关闭键盘。
如果您真的想在触摸编辑文本之外时关闭它,可以将onTouch侦听器添加到主视图并隐藏键盘:
findViewById(R.id.you_main_view).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e){
if (e.getAction() == MotionEvent.ACTION_UP) hideSoftKeyboard();
return false;
}
}
这有点棘手,因为您的包含视图可能无法处理触摸本身的子视图(例如列表视图)。您可能必须向不同的视图添加几个类似的触摸侦听器,以使整个屏幕注册命中。确保您的触摸侦听器返回false,否则他们将吞下您希望在其他地方处理的点击。
答案 1 :(得分:0)
不要使用onFocuschanged侦听器。 。只需为Outter图层实现OnTouchListener,就像LinearLayout一样,覆盖整个屏幕。在那个事件中隐藏键盘。
参见此示例:
MainActivity.java
package com.at.keyboardhide;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import com.at.bugsfixing.R;
public class MainActivity extends Activity implements OnTouchListener{
private EditText getEditText;
private LinearLayout getLinearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.keyboardmain);
getEditText = (EditText)findViewById(R.id.editText1);
getLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout01);
getLinearLayout.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v==getLinearLayout){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
return true;
}
return false;
}
}
它对我来说非常完美,希望它也能帮到你。
享受。 :)