如何在短信APP上添加字符计数器?

时间:2013-12-23 04:13:10

标签: android

我创建了一个简单的短信发送应用。在这个应用程序中,我想添加一个文本计数器。这该怎么做 ?总字符数限制为164.请有人帮我这样做。

4 个答案:

答案 0 :(得分:2)

首先为EditText设置最大长度,例如android:maxLength="164"

现在,您必须在用户键入消息时验证EditText的长度,并且可以使用TextWatcher Class & addTextChangedListener Listener进行验证。

现在使用简单的简单函数来验证输入文本,如下所示

public void Check_SMS_Length(EditText edt) throws NumberFormatException {
            try {
            if (edt.getText().toString().length() <= 0) {
                            edt.setError("Sorry...!! Its Mandatory Field");
                            valid_len = 0;
                            tv.setText("0/164");

                        } else {
                            valid_len = edt.getText().toString().length();
                            tv.setText(String.valueOf(valid_len) + "/" + 164);
                        }
                    } catch (Exception e) {
                        Log.e("error", "" + e);
                    }

                }

并在afterTextChanged中调用此函数。

edt.addTextChangedListener(new TextWatcher() {

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

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

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        Check_SMS_Length(edt); // pass your EditText Obj here.
    }
});

看起来如何?

enter image description here enter image description here

答案 1 :(得分:0)

我认为最好的解决方案是TextWatcher。它是一个接口,有3个方法可用于在更改文本之前,期间和之后执行操作。您可以将此界面添加到任何可编辑对象,例如EditText。

TextWatcher TextEditorWatcher = new TextWatcher() {
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    public void onTextChanged(CharSequence s, int start, int before, int count) {}
    public void afterTextChanged(Editable s) {}
}

希望它有所帮助!

答案 2 :(得分:0)

您可以在编辑文本的xml属性中设置编辑文本的最大字符数,如下所示:

android:maxLength="164"

此外,为了动态计算文本字段中的字符数,您可以使用以下代码:

//Global counter variable
final int counter=0;

//For your edit text, set a text change listener as shown below

EditText edt=(EditText)findViewById(R.id.editText1);

edt.addTextChangedListener(new TextWatcher() {

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                try {
                   counter=count;
                   if(counter>164)
                        Toast.makeText(getApplicationContext(),"Max length reached",Toast.LENGTH_SHORT).show();  
                } catch (NumberFormatException e) {
                }
            }
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub

            }
        });

这对我有帮助。希望它也能帮到你。

答案 3 :(得分:0)

您可以添加以下代码

edtCustomerSearch = (EditText) findViewById(R.id.edtCustomerSearch);
edtCustomerSearch.addTextChangedListener(new TextWatcher() {
@Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub

    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
        Log.d("TAG","lenth: "+edtCustomerSearch.getText().toString().length());
    }
});