我有一个显示EditText和两个底部的活动。
当我点击EditText时,Android虚拟键盘会显示,以便我可以输入我的文字。 现在,在任何底部敲击之前我想隐藏键盘。我想通过点击屏幕来实现。
我在stackoverflow中看过这里的帖子有一些类似的问题,但看起来不像工作。 我试图设置一个监听器:
// Create an anonymous implementation of OnFocusChangeListener
private OnFocusChangeListener mFocusListener = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean b) {
// do something when the focus changes
hideSoftKeyboard(v);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setupUI(findViewById(R.id.parent));
EditText editText = (EditText) findViewById (R.id.edit_message);
editText.setOnFocusChangeListener(mFocusListener);
setContentView(R.layout.activity_main);
}
我还尝试创建一个父活动,以递归方式将onTouch事件与不是文本视图的每个视图相关联,但它只注册文本视图(我从另一个stackoverflow帖子中获取了这段代码)
public void setupUI(View view) {
//Set up touch listener for non-text box views to hide keyboard.
if(!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(v);
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
对此有任何直接的解决方案吗?我无法相信没有更简单的方法来做到这一点。 我正在使用Gingerbread API(API级别10)
由于
答案 0 :(得分:4)
好的,我找到了一种以非常简单的方式完成此操作的方法: XML布局定义。由于Layout是ViewGroup,我们可以在其上实现事件。 去定义处理布局点击的方法(hideSoftKeyboard)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:id="@+id/main_layout"
android:onClick="hideSoftKeyboard" >
以下是我实施该方法的方法:
public void hideSoftKeyboard(View view) {
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
答案 1 :(得分:0)
为了相同的目的,我使用了以下方法
private void hideKeypad(){
EditText edtView=(EditText)findViewById(R.id.username);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
}