dialog中弹出系统键盘
如果你在为调用系统键盘出现的java.lang.NullPointerException: Attempt to invoke virtual method空指针异常而烦恼,或者因为关闭软键盘报如下空指针而担心:
`java.lang.NullPointerException: Attempt to invoke virtual
method 'android.os.IBinder android.view.View.getWindowToken()'
on a null object reference
不妨C-V操作一下下边的工具类
package bang.lib.utils;
import android.app.Activity;
import android.content.Context;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import java.util.Timer;
import java.util.TimerTask;
/**
* @autor YangTianFu
* @Date 2018/12/19 19:22
*/
public class InputMethodMangerUtil {
private volatile static InputMethodMangerUtil instance;
public InputMethodMangerUtil() {
}
public static InputMethodMangerUtil getInstance() {
if (instance == null){
synchronized (InputMethodMangerUtil.class){
if (instance == null){
instance = new InputMethodMangerUtil();
}
}
}
return instance;
}
/**
* 在有EditText的dialog中弹出系统软键盘
* @param editText
*/
public void openInputMethod(final EditText editText){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
InputMethodManager inputManager = (InputMethodManager) editText
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
inputManager.showSoftInput(editText, 0);
}
}, 200);
}
/**
* 在有EditText的dialog中关闭系统软键盘
* @param activity
*/
public void closeInputMethod(Activity activity){
try {
((InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
} catch (Exception e) {
LogUtils.e("closeInputMethod",e.toString());
}
}
}
解决EditText弹出系统键盘遮挡部分布局的问题
如果你的EditText刚好在页面的下边,那么当你点击EditText弹出软键盘的时候会发现系统的软键盘是紧贴着EditText的下边开始的,这样就会遮挡下边部分布局。解决方案如下,给EditText添加一个自定义的drawable背景:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@color/transparent"
android:insetLeft="0dp"
android:insetRight="0dp"
android:insetTop="@dimen/dp_4"
android:insetBottom="@dimen/dp_4">
</inset>
这样弹出的软键盘就会离EditText有一定的距离,就不再会遮挡了。