其他分享
首页 > 其他分享> > 关于软键盘弹出与隐藏

关于软键盘弹出与隐藏

作者:互联网

//弹起键盘
public static void showKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
view.requestFocus();
imm.showSoftInput(view, 0);
}
}

//隐藏软键盘
public static void hideKeyboard(View view){
InputMethodManager imm = (InputMethodManager)view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null){
imm.hideSoftInputFromWindow(view.getWindowToken(),0);
}
}

检测软键盘是否显示的类
public class UIUtils {

/**
 * 判断键盘是否显示
 * @param activity
 * @return
 */
public static boolean isSoftShowing(Activity activity) {
    //获取当前屏幕内容的高度
    int screenHeight = activity.getWindow().getDecorView().getHeight();
    //获取View可见区域的bottom
    Rect rect = new Rect();
    activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
    int bottom = rect.bottom;
    return screenHeight - rect.bottom > screenHeight/3;
}

/**
 * 如果键盘弹出则隐藏键盘
 * @param activity
 */
public static void hideSoftKeyboard(Activity activity){
    if (isSoftShowing(activity)){
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

/**
 * 显示软键盘
 * @param activity
 */
public static void showSoftKeyboard(Activity activity){
    if (!isSoftShowing(activity)){
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}


public interface OnSoftKeyWordShowListener {
    void hasShow(boolean isShow);
}
/**
 * 判断软键盘是否弹出
 * * @param rootView
 *
 * @param listener 备注:在不用的时候记得移除OnGlobalLayoutListener
 */
public static ViewTreeObserver.OnGlobalLayoutListener doMonitorSoftKeyWord(final View rootView, final OnSoftKeyWordShowListener listener) {
    final ViewTreeObserver.OnGlobalLayoutListener layoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            final Rect rect = new Rect();
            rootView.getWindowVisibleDisplayFrame(rect);
            final int screenHeight = rootView.getRootView().getHeight();

            final int heightDifference = screenHeight - rect.bottom;
            boolean visible = heightDifference > screenHeight / 3;
            if (listener != null)
                listener.hasShow(visible);
        }
    };
    rootView.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);
    return layoutListener;
}

}

标签:imm,InputMethodManager,public,软键盘,弹出,activity,隐藏,rect,view
来源: https://www.cnblogs.com/wang-jingyuan/p/13094267.html