我想创建一个只应接受大写字母,小写字母和数字值的BasicEditField。它不应该接受任何其他符号。 BlackBerry [{3}}是否有任何样式位可以使它以这种方式工作?如果没有,还有什么我可以做的吗?
答案 0 :(得分:6)
我使用以下方法:TextFilter#get和BasicEditField#setFilter
mEdit = new EditField();
mEdit.setFilter(TextFilter.get(TextFilter.NUMERIC));
或
// Numeric filter that also allows minus sign.
mEdit.setFilter(TextFilter.get(TextFilter.INTEGER));
我认为通过覆盖TextFilter创建自己的过滤器可以解决更难的过滤任务。
答案 1 :(得分:3)
也许不可能像那样组合它们,我没有尝试过。每当我在代码中使用过滤器时,我总是以上面提到的第二种方式完成它。它有点复杂,但可以让你更多地控制领域能够和不能接受的内容。查看TextFilter类的API文档。正如我上面所说,你只需要实现转换和验证方法。我认为在你的情况下你不需要做任何转换。但是在验证方法中,您只需检查字符是否在a-z A-Z或0-9范围内。如果返回true,否则返回false。这将阻止所有不需要的字符出现在字段中。
答案 2 :(得分:3)
使用BasicEditField这不容易实现;但是,正确的解决方案将使用AutoTextEditField更改BasicEditField。创建AutoTextEditField时,请使用可以传入参数的构造函数。这应该为你做。
new AutoTextEditField("My label:", "initial value", 1024, 50,
TextFilter.LOWERCASE | TextFilter.NUMERIC);
答案 3 :(得分:1)
mEdit.setFilter(TextFilter.get(TextFilter.NUMERIC));工作得很好,我认为,它没有采取减号,因为测试'无法插入“ - ”减去现场的减号。
答案 4 :(得分:0)
有一个构造函数允许您指定字段的样式。然后,您可以将所需的样式OR组合在一起,例如FILTER_UPPERCASE | FILTER_LOWERCASE | FILTER_NUMERIC。
或者,您可以调用setFilter并创建自己的TextFilter子类,它允许您通过覆盖convert和validate方法来指定所需的确切行为。转换允许您强制某些事情,例如自动将所有文本输入大写等。验证允许您阻止输入某些内容,例如特殊字符。查看API以获取更多信息。
答案 5 :(得分:-1)
Kumar我也遇到了同样的问题,使用下面的代码来修复它 -
以下脚本仅允许使用大写,小写,数字值。
setFilter(new TextFilter() {
public boolean validate(char c) {
return (Character.isDigit(c) || Character.isLowerCase(c) || Character.isUpperCase(c));
}
public char convert(char c, int status) {
return c;
}}