一、Android一些控件上显示的英文字母都被转为大写字母的问题
Android一些控件上输入的内容明明是小写字母但显示出来的却是大写字母,例如:
左边的布局Button控件中text里明明写的是“Hello World!”,但显示出来的却是“HELLO WORLD!”,这说明text在这中间被转换了。
Activity界面是继承自AppCompatActivity的,我将AppCompatActivity换成Activity就没事了。
二、原因分析
将AppCompatActivity替换成Activity虽然是个解决办法,但是继承自Activity的界面比较丑,这怎么能忍受,我猜这跟appcompat-v7包控件的默认值有关,于是打开appcompat-v7包下的values.xml文件。
找了下Widget.Button,找到了,但是没有内容,继续往父样式找,
进入TextAppearance.AppCompat.Button,也没有内容,再往上找,
来到Base.TextAppearance.AppCompat.Button,啊哈,看到textAllCaps属性被置为true,终于找到问题所在了。
只要我们把textAllCaps的值改为false就好了。
三、问题解决
(一)方案一
如果只针对某个Button控件有效,可以在写Button控件的时候把textAllCaps的值置为false,
(二)方案二
如果针对该Application或Activity所有的Button控件有效,可以写个继承Base.TextAppearance.AppCompat.Widget.Button的style,加个name为textAllCaps的item并把值置为false,在需要的theme中覆盖android:textAppearanceButton属性,并引用刚才定义的style,这样使用该theme的Application或Activity的Button的text就不会被转为大写,其他的控件也是找到它原来的style继承它,把textAllCaps改为false,在theme中找到对应的属性进行引用。
虽然解决了Button的问题,但其他控件有的也有这样的问题,例如menu,有没有全部都改的办法呢,
(三)方案三
办法是会有的,在使用的theme中加入android:textAllCaps的item把值赋为false,这样使用该theme的Application或Activity的有这样问题的控件都不会被转换成大写。