android button 字母自动变大写原因以及属性总结

本文探讨了在Android 5.0及以上版本中Button组件文本自动变为大写的原理。通过对比不同版本的编译环境,分析了textAllCaps属性设置为true的影响,并提供了解决方案。

最近在写例子的时候,发现写一个button的时候,定义text属性为字母的时候,字母自动变大写了,而使用textView 的时候却没有这种情况,所以研究和总结下;效果如下:

这里写图片描述


1.解决办法

设置 textAllCaps 为false 就可以了,如上图;


2.原因分析

首先我看了下我这个例子的编译项目的版本,项目版本为5.0

这里写图片描述

继续查看button 的源代码,使用的21 widget里面的button 属性

这里写图片描述


因为这个样式点不进去,所以网上查了资料,发现和版本有关,于是创建了一个4.4编译的项目版本

这里写图片描述

定义了xml 里面的button 属性 ,19的模拟器查看发现字母并没有大写,

这里写图片描述

继续查看源代码,引用的是4.4(19版本)的widget,
这里写图片描述

自此原因很明了是,是5.0以后button 的默认属性 textAllCaps 被改为true 了


3.原因总结

查看系统选代码:frameworks/base/core/res/res/values/styles_material.xml的第236行,代码如下:

<style name="TextAppearance.Material.Button">
        <item name="textSize">@dimen/text_size_button_material</item>
        <item name="fontFamily">@string/font_family_button_material</item>
        <item name="textAllCaps">true</item>
        <item name="textColor">?attr/textColorPrimary</item>
</style>

这里写图片描述

可以发现真的是把textAllCaps属性设置为true了。


4.附录TextView属性大全

因为 button 是继承 TextView 的,所以贴上 TextView 的属性

android:autoLink 是否自动链接网址或邮箱地址;
android:autoText 自动检测错误;
android:bufferType 决定getText()返回的类型
android:capitalize 指定使用类型
android:cursorVisible 光标是否可见
android:digits 数字输入
android:drawableBottom 内容显示在文字的下边
android:drawableEnd 内容显示在文字的结尾
android:drawableLeft 内容显示在文字的左边
android:drawablePadding 内容和文字之间的空隙
android:drawableRight 内容显示在文字的右边
android:drawableStart 内容显示在文字的开始
android:drawableTop 内容显示在文字的上边
android:editable 编辑功能,能够使用输入法
android:editorExtras 编辑功能扩展,用户设置
android:ellipsize 椭圆区域的显示方式
android:ems 可以在更多系统上运行
android:fontFamily 字体风格
android:freezesText 冻结在光标位置
android:gravity 文字小于显示范围时,x和y轴方向的调整
android:height 文字像素高度
android:hint 文本空白时的提示语
android:imeActionId 激活输入法ID序号
android:imeActionLabel 激活输入法符号
android:imeOptions 输入法操作
android:includeFontPadding 足够空间容纳字体显示
android:inputMethod 指定输入法
android:inputType 选择输入法
android:lineSpacingExtra 额外的文字间距
android:lineSpacingMultiplier 额外的文字间距,乘数
android:lines 多行显示
android:linksClickable 点击链接
android:marqueeRepeatLimit 跑马灯重复限制
android:maxEms 最大系统兼容
android:maxHeight 最大文本高度
android:maxLength 最大文本长度
android:maxLines 最大文本行数
android:maxWidth 最大文本长度
android:minEms 最小系统兼容
android:minHeight 最小文本高度
android:minLines 最小文本行数
android:minWidth 最小文本宽度
android:numeric 支持数字输入
android:password 文本作为密码
android:phoneNumber 支持电话号码输入
android:privateImeOptions 私人输入操作
android:selectAllOnFocus 点击全部选中
android:shadowColor 阴影颜色
android:shadowDx 阴影水平偏移
android:shadowDy 阴影垂直偏移
android:shadowRadius 阴影半径
android:singleLine 单行显示
android:text 显示文本
android:textAllCaps 文本全部大写
android:textAppearance 基本的文字颜色,字体,大小,风格
android:textColor 文本颜色
android:textColorHighlight 文本高亮颜色
android:textColorHint 文本提示颜色
android:textColorLink 链接文本颜色
android:textIsSelectable 文本能够被选中
android:textScaleX 水平缩放参数
android:textSize 文本大小
android:textStyle 文本风格
android:typeface 文本字体
android:width 文本宽度


5.参考资料

1.(Google)TextView属性大全(API-16)

<think>我正在处理一个用户的问题,他们想知道如何解决按钮英文显示全大写的问题,使其正常显示。用户提供的引用包含了多个解决方案,我需要整合这些信息并给出清晰的回答。 首先,我查看用户提供的引用。引用[1]指出Button默认将所有文本转为大写,建议设置`android:textAllCaps="false"`来禁用此行为。引用[2]和[3]提供了类似的方法,强调在Button中添加该属性即可显示小写字母。引用[4]解释了问题源于Android 5.1 SDK的默认样式更,将`textAllCaps`设置为true,并提到了系统源码的位置作为背景。 用户的真正需求是查找方法解决按钮英文全大写的问题。我需要确保回答准确、实用,并覆盖关键点:问题起因、解决步骤和示例代码。 接下来,我规划回答结构。开头应直接解释问题原因Android默认将Button文本全部大写。然后分步骤说明解决方法:在布局XML中添加`android:textAllCaps="false"`属性。我将提供一个简单示例代码,如引用[2]和[3]所示,让用户能直接复制使用。最后,简要说明问题的根源,如引用[4]提到的默认样式更,以增加深度。 为了确保专业性,我会提醒用户属性名称的正确拼写("textAllCaps"),避免常见错误。同时,语言保持简洁中文,符合用户要求。 最后,我需要生成相关问题。基于主题,考虑设计3个问题:如何全局禁用此行为、是否影响其他控件、如何在代码中动态设置属性。这些问题扩展了主题,帮助用户深入探索。 </think>根据您的需求,解决Android按钮英文全大写显示问题的方法如下(基于站内引用整合): ### 解决方法 1. **问题根源** Android系统(特别是5.1及以上版本)默认开启Button的文本全大写属性(`textAllCaps=true`),导致英文自动转为大写[^4]。 2. **解决方案** 在XML布局文件中为Button添加属性: ```xml android:textAllCaps="false" ``` 3. **完整示例代码** ```xml <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Test" <!-- 此处正常书写英文 --> android:textAllCaps="false" <!-- 关键属性 --> android:background="@null"/> <!-- 可选样式 --> ``` 添加后按钮将正常显示"Test"而非"TEST"[^2][^3]。 ### 注意事项 - **属性拼写**:确保写为`textAllCaps`而非`textAllcaps`(注意大小写)[^1] - **版本兼容**:此方案适用于所有Android版本,尤其解决Material Design风格的默认行为[^4] - **作用范围**:仅需在需要保留小写的Button上单独设置该属性
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值