不自动弹出软键盘,带有EditText控件的在第一次显示的时候会自动获得focus,并弹出键盘,如果不想自动弹出键盘,有两种方法如下:
方法一:
在mainfest文件中把对应的activity设置
android:windowSoftInputMode="stateHidden|adjustResize"也可以根据项目需要设置其他属性如下:
stateUnspecified :未指定软键盘的状态,系统将自动选择一个合适的状态或依赖于主题中的设置,这是默认的设置
stateUnchanged : 当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
stateHidden : 用户选择activity时,软键盘总是被隐藏
stateAlwaysHidden :当该Activity主窗口获取焦点时,软键盘也总是隐藏的
stateVisible :软键盘通常是可见的
stateAlwaysVisible :用户选择activity时,软键盘总是显示的状态
adjustUnspecified :默认设置,通常由系统自行决定是隐藏还是显示
adjustResize: 该Activity总是调整屏幕的大小以便留出软键盘的空间
adjustPan : 当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
一般来说,用的比较多的还是"stateHidden|adjustResize"和"stateHidden|adjustPan"这两对组合。
"adjustResize"在使用时布局会被软键盘顶上去,体验非常不好
"adjustPan"在使用时获取焦点的控件下边的View将会被软键盘覆盖
方法二:
就是让EditText第一次进去不自动获取焦点,方法是在父控件上加上下面两行代码:
android:focusable="true"
android:focusableInTouchMode="true"
隐藏软件盘 代码如下:
import android.content.Context;
import android.os.IBinder;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
/**
* 软键盘隐藏工具类
* Created by chen_yong on 2017/5/8.
*/
public class DisplayUtils {
/**
* @param v view
* @param event 时间
* @return 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
*/
public static boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] l = {0, 0};
v.getLocationInWindow(l);
int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
+ v.getWidth();
if (event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom) {
// 点击EditText的事件,忽略它。
return false;
} else {
//点击其他地方EditText失去焦点
v.clearFocus();
return true;
}
}
// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
return false;
}
/**
* * 多种隐藏软件盘方法的其中一种
* *
* * @param token edittext.getWindowToken()
*/
public static void hideSoftInput(Context mContext, IBinder token) {
if (token != null) {
InputMethodManager im = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
im.hideSoftInputFromWindow(token,
InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}