关于自定义dialog的EditText无法弹出软键盘的bug的解决方案

来源:互联网 发布:数据恢复高级技术pdf 编辑:程序博客网 时间:2024/06/05 06:03

转载请标明出处

http://blog.csdn.net/mohan6/article/details/78641769

本文作者:【默寒的博客】



上周写了一个自定义dialog,自定义布局如下:

问题1: 弹 dialog的activity的布局中,有个editText,输完信息点“确定”弹出上面的dialog。

但是软键盘没有关闭,被弹出的dialog覆盖掉了。

解决的方法:在弹出dialog弹出之前,把软键盘关闭。

/**     * 关闭键盘     *     * @param mContext     * @param view     */    public static void closeKeyboard(Context mContext, View view) {        try {            InputMethodManager imm = (InputMethodManager) mContext                    .getSystemService(Context.INPUT_METHOD_SERVICE);            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);        } catch (Exception e) {        }    }
问题2:自定义dialog中editText,不弹软键盘。

解决办法:

    //只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘      dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);      //加上下面这一行弹出对话框时软键盘随之弹出      dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);  
延伸:

系统dialog添加editText,并对editText的margin进行设置。

final EditText editText = new EditText(mContext);//        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(AppUtils.px2dip(mContext, 200f), AppUtils.px2dip(mContext, 50));//        params.setMargins(AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10));//        editText.setLayoutParams(params);        Drawable drawable = getResources().getDrawable(R.drawable.shape_edti_background);        editText.setBackground(drawable);        editText.setInputType(InputType.TYPE_CLASS_NUMBER);//数字        editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); //最大输入长度        editText.setTransformationMethod(PasswordTransformationMethod.getInstance()); //设置为密码输入框        Dialog dialog = new AlertDialog.Builder(mContext)                .setMessage("请输入密码")                .setView(editText, 30, 10, 30, 0)                .setCancelable(false)                .setNegativeButton("取消", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        dialog.dismiss();                    }                })                .setPositiveButton("确定", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        String et = editText.getText().toString().trim();                        if (TextUtils.isEmpty(et)) {                            ToastUtil.show(getApplication(), "密码为空");                        }                    }                })                .create();        dialog.setCanceledOnTouchOutside(false);        dialog.show();
通过以下代码设置margin,没起作用。原因未知,如果有网友了解什么原因,请留言,互相学习。

 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(AppUtils.px2dip(mContext, 200f), AppUtils.px2dip(mContext, 50));//        params.setMargins(AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10), AppUtils.px2dip(mContext, 10));//        editText.setLayoutParams(params);
最终我用的解决办法:

 dialog.setView(editText, 30, 10, 30, 0)








阅读全文
0 0