怎么获取键盘的高度

最近做项目的时候要使用emoj表情, emoj标签的输入块要和软键盘的高度一致, 于是有了获取软键盘高度的需求, 


废话少说, 下面是我写的一个获取键盘高度的工具类:


public class KeyboardHeightUtils {

    /**
     * 初始化键盘高度 (键盘弹出时才有效; 首次进入Activity时, 计算的高度newKeyboardHeight=0)
     * @param activity
     */
    public static void initKeyboardPanelHeight(final Activity activity) {
        final int oldKeyboardHeight = getKeyboardHeight();
        final View v = activity.findViewById(android.R.id.content);
        v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                Rect r = new Rect();
                View rootview = activity.getWindow().getDecorView();
                rootview.getWindowVisibleDisplayFrame(r);

                int screenHeight = rootview.getRootView().getHeight();
                int newKeyboardHeight = screenHeight - r.bottom;

                if (newKeyboardHeight > 300) {
                    if (newKeyboardHeight != oldKeyboardHeight) {
                        KeyboardHeightUtils.setKeyboardHeight(newKeyboardHeight);
                    }
                    v.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                }
            }
        });
    }

    /**
     * 获取键盘高度
     * @return
     */
    public static int getKeyboardHeight() {
        return Preferences.getSharedPreferences().getInt(PreferencesKey.PREFS_KEY_KEYBOARD_HEIGHT, 0);
    }

    /**
     * 设置键盘高度
     * @param keyboardHeight
     */
    public static void setKeyboardHeight(int keyboardHeight) {
        Preferences.getSharedPreferences().edit().putInt(PreferencesKey.PREFS_KEY_KEYBOARD_HEIGHT, keyboardHeight).apply();
    }
}

可以在有EditText的Activity中调用, 可以在这样的Activity的onCreate中初始化软件盘的高度, 如:  KeyboardHeightUtils.initKeyboardPanelHeight(this)


如有错误之处, 欢迎指正 .......



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值