【问题标题】:How to have a specific format for an EditText (dd/mm/yyyy)如何为 EditText 设置特定格式 (dd/mm/yyyy)
【发布时间】:2015-09-20 23:21:28
【问题描述】:

我想知道如何才能拥有一个 EditText,用户必须在其中键入“dd/mm/yyyy”的特定格式。我已经使用了“日期时间”输入类型,但这只会改变键盘上的键。

【问题讨论】:

标签: android


【解决方案1】:

只需将其添加到您的 Oncreate 中

    et5.addTextChangedListener(new TextWatcher(){

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
            //Do Nothing
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            //Do Nothing
        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
            ss =input_Dob.getText().toString();
            int o = 0;

            if ((ss.charAt(2) == '/') && (ss.charAt(4) == '/')) {
            Toast.makeText(Create_An_Account.this, "Format Is right", Toast.LENGTH_LONG).show();

            } else {
                tv5.setTextColor(Color.RED);
                tv5.setText("Invalid Format");


            }
            ss = "";


        }


    });

【讨论】:

    【解决方案2】:

    你可以使用下面的正则表达式

    “[0-9]{2}[/][0-9]{2}[/][0-9]{4}”

    并验证用户输入并强制用户以 dd/mm/yyyy 格式输入。

    但是,如果您想动态地执行此操作,则意味着一旦用户输入日期到 dd/mm/yyyy 格式就会自动转换用户输入),那么您必须自定义编辑文本视图并实现自定义输入过滤器,您必须在其中编写逻辑。

    【讨论】:

    • 这不起作用。用户仍然可以输入任意数量的字符
    【解决方案3】:
    use this in Oncreate.
    

    假设编辑文本 id 是 edittext1 。

    et1=(EditText)findviewbyid(R.id.editText1)

    et1.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
                // Add Here whatever you want to do before text changed
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                // TODO Auto-generated method stub
    

    }

            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    

    /*我下面的例子是检查电子邮件,它必须包含 .com 和 @ */

                ss ="oooo"+input_Email.getText().toString();
    
                a = ss.length();
                a--;
                int o = 0;
    
                if ((ss.charAt(a) == 'm') && (ss.charAt(a - 1) == 'o')
                        && (ss.charAt(a - 2) == 'c')
                        && (ss.charAt(a - 3) == '.')) {
                    o = 1;
                    while (a >= 0) {
                        aa = ss.charAt(a);
                        if (aa == '@' || aa == '.') {
                            j++;
                        }
                        a--;
                    }
                }
                if ((j >= 2) && (o == 1)) {
                    tv8.setTextColor(Color.GREEN);
                    tv8.setText("Correct");
                    Email_Check="Correct";
                } else {
                    tv8.setTextColor(Color.RED);
                    tv8.setText("Invalid Email Address");
                    Email_Check="Invalid";
    
                }
                ss = "";
    
            }
        });
    

    【讨论】:

      【解决方案4】:

      我认为可以做到这一点的唯一方法是在此EditText 中输入一个提示,该提示将显示为 DD/MM/YYYY,以便用户可以以该格式输入(提示)。我不认为有一种方法可以像你想要的那样强迫它。您可以输入单独的组件,例如 DD、MM 和 YYYY 的单独字段,并对它们进行限制,然后连接等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 2020-11-10
        • 1970-01-01
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多