今天写项目的时候,在自测的时候,操作一个 EditText 输入内容为字母和数字,并且字母全部自动大写的时候突然就停止运行了。

错误提示:

8bed014d3e338d9a.png

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

网上查阅一些资料发现,android:textAllCaps 属性是只支持 TextView 的,

EditText 是需要通过 inputType 属性来控制的

android:inputType="textCapCharacters"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

但是我在测试之后,发现 EditText的这个属性并没起到作用。

最终,只能自己去控制 输入内容转换大写了。

布局文件如下:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

因为我这里需要控制只能输入字母和数字,所以我用 digits 直接去限制能输入的字符。然后,输入内容控制了,下面该去控制让它自动转换为 大写字母了,代码通过 addTextChangedListener 来监听输入状态:

edit_text.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

}

@Override

public void afterTextChanged(Editable s) {

// 先移除当前监听,避免死循环。

edit_text.removeTextChangedListener(this);

String string = edit_text.getText().toString().toUpperCase();

edit_text.setText(string);

edit_text.setSelection(string.length());// 让光标定位最后位置。

//操作完当前显示内容之后,再添加监听。

edit_text.addTextChangedListener(this);

}

});

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

这里因为自己的知识点不够全面,所以有其他处理方式的话,也请各位指点一下。

小奋斗文章

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐