android Dialog和EditText

本文介绍了如何在Android中设置Dialog为全屏或固定宽度,以及如何实现EditText的过滤功能。在布局文件中,可以使用`android:digits`属性限制输入特定字符集,如数字和字母。而在代码中,可以通过正则表达式来限制输入字母、汉字和数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Dialog全屏或者固定宽度

public void installContent() {
        /* We use a custom title so never request a window title */
        mWindow.requestFeature(Window.FEATURE_NO_TITLE);
        //输入法弹出
//        if (mView == null) {
//            mWindow.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
//                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
//        }
        mWindow.setContentView(mCompatDialogLayout);

        final CompatParams p = mParams;
        if (p != null) {
            if (p.mWindowFullScreen) {
                //全屏显示
                WindowManager.LayoutParams lp = mWindow.getAttributes();
                lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                mWindow.setAttributes(lp);
                mWindow.getDecorView().setPadding(0, 0, 0, 0);
            } else {
                WindowManager wm = (WindowManager) getContext()
                        .getSystemService(Context.WINDOW_SERVICE);
                DisplayMetrics dm = new DisplayMetrics();
                wm.getDefaultDisplay().getMetrics(dm);
                WindowManager.LayoutParams lp = mWindow.getAttributes();
                lp.width = (int) (dm.widthPixels * 0.8f);
                lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                mWindow.setAttributes(lp);
                mWindow.getDecorView().setPadding(0, 0, 0, 0);
            }
            if (p.mWindowGravity > 0) {
                mWindow.setGravity(p.mWindowGravity);
            }
        }
        setupView();
    }

在dialog中onCreate调用
mWindow.requestFeature(Window.FEATURE_NO_TITLE);一定要在mWindow.setContentView(mCompatDialogLayout);之前调用
设置参数 WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM后,输入法无法弹出


2.EditText过滤

在layout中过滤
限制输入数字和字母
android:digits="0123456789abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


在代码中过滤
限制输入字母,汉字,数字,使用正则表达式

EditText editText = (EditText) findViewById(R.id.edit_test);
        InputFilter[] oldFilters = editText.getFilters();
        InputFilter[] newFilters = new InputFilter[(oldFilters != null ? oldFilters.length + 1 : 1)];
       //此处是为了保证在layout中的过滤设置,如长度
        if (oldFilters != null) {
            System.arraycopy(oldFilters, 0, newFilters, 0, oldFilters.length);
        }
        newFilters[newFilters.length - 1] = new MyFilter();
        editText.setFilters(newFilters);

class MyFilter implements InputFilter {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            Log.e("whuthm", "source = " + source + "  " + start + "  " + end);
            Log.e("whuthm", "dest = " + dest + "  " + dstart + "  " + dstart);
            return stringFilter2(source.toString());
        }
    }

public static String stringFilter(String str) throws PatternSyntaxException {
        // 只允许字母和数字
        String regEx = "[^a-zA-Z0-9]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }

    public static String stringFilter2(String str) throws PatternSyntaxException {
        // 只允许字母和数字中文
        String regEx = "[^a-zA-Z0-9\u4E00-\u9FA5]";
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
        return m.replaceAll("").trim();
    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值