给Dialog创建自定义键盘popupwindow

最近项目需要用到自定义键盘,一个是放在webview中通过点击网页中的编辑框弹出,一个是在dialog弹框显示的时候弹出自定义键盘的,自定义键盘都是用popupwindow形式底部弹出的。

其中webview中的自定义键盘还好做些,就是要注意屏蔽掉系统键盘,用如下的方式即可,网页里面最好也能禁掉input的点击事件,保留焦点事件,否则有些设备还是会弹出系统键盘的:

public static void hideKeyboard(Context context, View view) {
        InputMethodManager imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

重点讲一下dialog的弹出自定义键盘的问题,因为dialog是以窗口形式出现,如果我们设置popupwindow是依附与dialog来弹出肯定是不行的,键盘弹出的宽度只有dialog的宽度,所以我们在设置键盘宽度时可以这么写:
public void showKeyBoard(@NonNull EditText editText) {  //弹框键盘
        mEdit = editText;
        int visibility = keyboardLayout.getVisibility();
        if (visibility == View.GONE || visibility == View.INVISIBLE) {
            keyboardLayout.setVisibility(View.VISIBLE);
        }

        IBinder windowToken = editText.getWindowToken();
        if (windowToken != null && windowToken.isBinderAlive()) {
            Rect rect = new Rect();
            editText.getRootView().getGlobalVisibleRect(rect);
            Context editTextContext = editText.getContext();
            Resources resources = editTextContext.getApplicationContext().getResources();
            DisplayMetrics dm = resources.getDisplayMetrics();
            int y = rect.bottom - dm.heightPixels;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                boolean isActivity = needAttachedInDecor(editText);
                keyboardWindow.setAttachedInDecor(isActivity);
            }
            keyboardWindow.setTouchable(true);
            keyboardWindow.showAtLocation(editText, Gravity.BOTTOM | Gravity.LEFT, 0, y);
            keyboardWindow.update(keyboardWindow.getWidth(), keyboardWindow.getHeight());
        }
    }
重点是标红的内容。

最重要的一点其实是我们的Dialog需要继承的是AlertDialog,注意这个AlertDialog必须的引入必须是v7下的:

import android.support.v7.app.AlertDialog;
否则没用,或者保留ActionBar也可以让自定义键盘宽度铺满。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值