刚刚结束的项目中,被客户的产品经理虐的体无完肤... 不过也对EditText中的属性有了更深入的了解。-.-
不瞎扯,直接进入正题。
EditText属性:
1. android:digis=""// 规定输入内容,由此属性引发的血案,下面重讲!!!
2. android:inputType=""//属性值有:textCapCharacters (网上说是字母大写然而并没什么用,关于小写转大写下面会讲到喔~)
3 android:textCursorDrawable=""//编辑框光标颜色设置 不要直接设置颜色,需要在drawable文件下画,然后引用。有些时候,你会发现你的EditText没有光标了,不要着急,这个错误我已经在你之前犯过了。T_T ,原因可能是你把主题的颜色设置为透明的或者白色了。
4.android:includeFontPadding="true"//设置文本是否包含顶部和底部额外空白,默认为true。
5.android:lineSpacingExtra=""//设置行间距。(同TextView)
6 android:ellipsize=""//设置当文字过长时,该控件 该如何显示。有如下值设置:”start”—–省略号显示在开头;”end”——省略号显示在结尾;”middle”—-省略号显示在中间;”marquee” ——以跑马灯 的方式显示(动画 横向移动)
还有其他的一些属性,我在项目中没有遇到过。不提了...嘿嘿... 下面着重说下大小写引发的血案。项目中遇到输入车牌客户那边要求输入数字字母组合,且字母自动大写。
因为牵扯到输入限制所以调用了上面的 digits属性。因为要字母的输出都是大写所以就写了
android:digits="0123456789abcdefghijklmnopqrstuvwxyz"
然后将小写转大写:
第一种方法:
/**
* 限制键盘只输入大写字母
*/
public class AllCapTransformationMethod extends ReplacementTransformationMethod {
@Override
protected char[] getOriginal() {
char[] aa = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
return aa;
}
@Override
protected char[] getReplacement() {
char[] cc = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z' };
return cc;
}
}
然后调用
etCarCard.setTransformationMethod(new AllCapTransformationMethod());
此方法虽然你在界面上看起来是大写的,但实际不是你需要的,你还需要拿到字符串然后调用String.toUpperCase();这时候才是真正的大写。
第二种方法:
etCarCard.addTextChangedListener(new TextWatcher()
{
int index = 0;
@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
etCarCard.removeTextChangedListener(this);//解除文字改变事件
index = etCarCard.getSelectionStart();//获取光标位置
etCarCard.setText(s.toString().toUpperCase());//转换
etCarCard.setSelection(index);//重新设置光标位置
etCarCard.addTextChangedListener(this);//重新绑定事件
}
});
项目中采用的是第一种。
好了 ,兴致勃勃的感觉搞定了,然后打包给客户,他说按下键盘大写的按钮后不能输入了。当时有点方的T_T,最开始觉得吧可能是这两种方法的问题,加了这两个任一,可能系统只限制了小写有效(这时候,我觉得自己发现了一个系统BUG,TMDSJBWY... 后面很确定那是自己的妄想症犯了)。看了很多文章,甚至都翻了源码,最后还是不行。最后设置布局文件里其他属性的时候看到了这一条
android:digits="0123456789abcdefghijklmnopqrstuvwxyz"
于是我就加了
android:digits="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
试了一下,结果就行了。于是这个坑爹的问题也就解决了。本来当初是想加大写的,但觉得要求是让大写转小写自动转换大写。所以就...总而言之,还是自己害了自己,希望大家不要犯了类似的错误。不过,经过这次也发现了Edittext中有些属性并没什么卵用。