android EditText取消焦点且退出软键盘
最近发现,如果在一个activity中直接加入EditText的话,每次打开这个activity的时候,就会自动打开软键盘,并且点哪里都取消不了。这会给用户一种特别糟糕的体验。
为了解决这种方法,想了一个解决的思路,就是点击背景就取消焦点并且退出软键盘,由于这个方法应该在所有拥有EditText的地方使用,所以就写成了一个工具类,用来调用
package com.baibian.tool;
import android.app.Activity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import java.util.List;
/**
* 这个工具类用来处理
*/
public class UI_Tools {
private List<ViewGroup> listViewGroup;
private List<EditText> listEditText;
public int i = 0;
public UI_Tools() {
}
/**
* 这个方法用来使得EditText,,点击其他地方的时候,取消焦点并且退出软键盘。。在有EditView的地方都应该调用这个方法。
* 传入的三个参数,第一个是活动,第二个是取消焦点要点击的地方,比如背景layout,listview之类的,第三个参数是其中一个edittext,只需要传入一个就可以达到效果
*/
public void CancelFocus(final Activity activity, final List<ViewGroup> listViewGroup, final EditText edittext) {
System.out.print(listViewGroup.size());
for (; i < listViewGroup.size(); i++) {
listViewGroup.get(i)
.setFocusable(true);
listViewGroup.get(i)
.setFocusableInTouchMode(true);
listViewGroup.get(i)
.setFocusable(true);
listViewGroup.get(i)
.setFocusableInTouchMode(true);
listViewGroup.get(i)
.requestFocus();
listViewGroup.get(i)
.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘
return false;
}
});
}
}
//一个布局的取消焦点
public void CancelFocusOne(final Activity activity, final ViewGroup viewGroup, final EditText edittext) {
viewGroup
.setFocusable(true);
viewGroup .setFocusableInTouchMode(true);
viewGroup .setFocusable(true);
viewGroup .setFocusableInTouchMode(true);
viewGroup .requestFocus();
viewGroup .setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘
return false;
}
});
}
}
调用的关键代码:
UI_Tools ui_tools = new UI_Tools();
ui_tools.CancelFocusOne(this, edit_information_all_layout, user_name_edittext);
新手学习作品,如果改进的地方,希望大神指出,谢谢。