【发布时间】:2013-12-23 13:21:56
【问题描述】:
我正在创建一个简单的短信发送应用程序。在这个应用程序中,我想添加一个文本计数器。这个怎么做 ?总字符数限制为 164。请任何人帮我这样做。
【问题讨论】:
-
您目前有代码吗?您想过哪些潜在的解决方案?
-
在发送消息之前使用 EditText.getText().length()
标签: android
我正在创建一个简单的短信发送应用程序。在这个应用程序中,我想添加一个文本计数器。这个怎么做 ?总字符数限制为 164。请任何人帮我这样做。
【问题讨论】:
标签: android
首先为您的 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.
}
});
它会是什么样子?
【讨论】:
您可以添加以下代码
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());
}
});
【讨论】:
我认为最好的解决方案是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) {}
}
希望对你有帮助!
【讨论】:
您可以在编辑文本的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
}
});
这对我有帮助。希望对你也有帮助。
【讨论】: