您的位置:首页 > 移动开发 > Android开发

Android问题集(四)——EditText输入完毕后,击屏幕其它区域,隐藏/关闭输入法

2015-09-01 22:30 519 查看
使用场景:EditText输入完毕后,点击屏幕其他区域,关闭输入法。

思路

1、让EditText失去焦点,即让EditText所在的布局layout获取焦点;

2、隐藏输入法。

例一:使LinearLayout布局下的EditText,在输入完毕后,点击屏幕其他区域,关闭输入法:

LinearLayout linearLayout =(LinearLayout)findViewById(R.Id.linearLayout );
linearLayout.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
//-------------------------------------------------
//让linearLayout获取焦点
linearLayout.setFocusable(true);
linearLayout.setFocusableInTouchMode(true);
linearLayout.requestFocus();

//-------------------------------------------------
//隐藏输入法
InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(linearLayout.getWindowToken(), 0);
return false;
}
});


拓展:当应用包含较多EditText时,将该方法写到一个类中,用时调用更为便捷:

public class LostFocus  {

/***************************************************************************
*
* 使线性布局中的EditText失去焦点,并隐藏输入法。
*
***************************************************************************/
public void linearLayout(final LinearLayout linearLayout,final Context context) {
linearLayout.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
//-------------------------------------------------
//linearLayout获取焦点
linearLayout.setFocusable(true);
linearLayout.setFocusableInTouchMode(true);
linearLayout.requestFocus();

//-------------------------------------------------
//隐藏输入法
InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(linearLayout.getWindowToken(), 0);
return false;
}
});

}

/***************************************************************************
*
* 使相对布局中的EditText失去焦点,并隐藏输入法。
*
***************************************************************************/
public void relativeLayout(final RelativeLayout relativeLayout,final Context context) {
relativeLayout.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
//-------------------------------------------------
//relativeLayout获取焦点
relativeLayout.setFocusable(true);
relativeLayout.setFocusableInTouchMode(true);
relativeLayout.requestFocus();

//-------------------------------------------------
//隐藏输入法
InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(relativeLayout.getWindowToken(), 0);
return false;
}
});

}
}


在MainActivity中使RelativeLayout布局下的EditText,在输入完毕后,点击屏幕其他区域,关闭输入法:

// --------------------------------------------------------------------------------
LostFocus mLostFocus = new LostFocus();
RelativeLayout mRelativeLayout = (RelativeLayout)
findViewById(R.id.relative_layout_login);
// --------------------------------------------------------------------------------
mLostFocus.relativeLayout(mRelativeLayout, MainActivity.this);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: