为啥我的 Button 文本在 Lollipop 上强制全部大写?
Posted
技术标签:
【中文标题】为啥我的 Button 文本在 Lollipop 上强制全部大写?【英文标题】:Why is my Button text forced to ALL CAPS on Lollipop?为什么我的 Button 文本在 Lollipop 上强制全部大写? 【发布时间】:2015-01-13 13:14:04 【问题描述】:在我的应用 “Tide Now WA” 中,我最近使用它测试了兼容性 新的 Nexus 9 平板电脑(Lollipop - API 21)。
它会写一些按钮文本。此应用程序使用 android 2.3 和 Android 正确写入文本 4.0。 IE。混合大写和小写字母。
当我的 Nexus 9 上运行相同的应用程序时,所有字母 文中大写。
FWIW 我的清单包含以下语句:
uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"
我可以在我的代码中修复这个问题还是操作系统中的错误? 谢谢
【问题讨论】:
你能分享一下你是如何混合大写和小写字母的代码 它们在我的 strings.xml 中定义,例如我不知道为什么会这样,但有 3 次微不足道的尝试:
在您的layout-v21
中使用android:textAllCaps="false"
以编程方式更改按钮的转换方法。 mButton.setTransformationMethod(null);
检查你的全大写风格
注意:public void setAllCaps(boolean allCaps)
、android:textAllCaps
是 API 版本 14 中的 available。
【讨论】:
#1 没有区别。不知道怎么做#3,没有样式?现在尝试#2。 是的,添加这个:btn[i].setTransformationMethod(null);让它工作谢谢 我接受 Nikola 的回答作为解决方案,但想指出问题的另一部分是由 alanv 提供的,他在上面的 cmets 中解释了原因。 也为我工作,使用编程方法,因为 textAllCaps XML attr 仅支持 API > 14。谢谢! 我在样式定义中使用了<item name="android:textAllCaps">false</item>
【参考方案2】:
这是我在 values/themes.xml 中所做的
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="buttonStyle">@style/MyButton</item>
</style>
<style name="MyButton" parent="Widget.AppCompat.Button">
<item name="android:textAllCaps">false</item>
</style>
【讨论】:
对于 pre-API Level 14 支持,您可以使用<item name="textAllCaps">false</item>
。
这仅适用于 Widget.AppCompat.Button。下面的 Ashish Chaugule 给出了更一般的答案,即直接将 buttonStyle
更改为android:buttonStyle
时开始工作
在 XML android:textAllCaps="false"
中(我使用的是 android studio 3.0)【参考方案3】:
这可以通过设置按钮的 TransformationMethod 在应用程序代码中修复,例如
mButton.setTransformationMethod(null);
【讨论】:
对于 Kotlin,语法是:mButton.transformationMethod = null【参考方案4】:设置 android:textAllCaps="false"。如果您使用的是 appcompat 样式,请确保 textAllCaps 位于样式之前。否则样式将覆盖它。例如:
android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
【讨论】:
工作就像一个魅力,但在我的情况下,我不得不这样做: 【参考方案5】:在样式中添加这一行
<item name="android:textAllCaps">false</item>
【讨论】:
我不知道他们为什么将其设为默认值 这是材料主题的默认设置,因为它适合材料设计的性质 可怜的人被卡在材料设计的方盒子里【参考方案6】:这个正在工作....只需在底部代码中的代码中添加这个:
android:textAllCaps="false"
它应该停用 U 尝试输入 small 的大写字母。
【讨论】:
【参考方案7】:棒棒糖默认自带“textAllCaps true”,所以你必须手动设置为false
【讨论】:
很高兴知道。如果有一个网站列出了每个 android 版本的所有这些默认值?【参考方案8】:在你的 xml 中使用这一行 android:textAllCaps="false"
<Button
android:id="@+id/btn_login"
android:layout_
android:layout_
android:text="@string/login_str"
android:background="@color/colorBlue"
android:textColor="@color/colorWhite"
android:textAllCaps="false"
/>
【讨论】:
非常有用的答案。谢谢【参考方案9】:在<Button>
标签中添加 android:textAllCaps="false" 就可以了。
【讨论】:
【参考方案10】:有一种更简单的方法适用于所有按钮,只需更改主题中按钮的外观,试试这个:
在 values-21/styles.xml
<resources>
<style name="myBaseTheme"
parent="@android:style/Theme.Material.Light">
<item name="android:colorPrimary">@color/bg</item>
<item name="android:colorPrimaryDark">@color/bg_p</item>
<item name="android:textAppearanceButton">@style/textAppearanceButton</item>
</style>
<style name="textAppearanceButton" parent="@android:style/TextAppearance.Material.Widget.Button">
<item name="android:textAllCaps">false</item>
</style>
</resources>
PS:建议遵循 Material Design 的原则,Buttons 中应显示大写文字,http://www.google.com/design/spec/components/buttons.html
【讨论】:
我同意,遵循设计指南非常好......直到按钮文本不再适合按钮 google 应该停止谈论样式 - 我不知道街上有人因为小写按钮而哭泣和抽泣!【参考方案11】:Java:
yourButton.setAllCaps(false);
科特林:
yourButton.isAllCaps = false
XML:
android:textAllCaps="false"
样式:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="buttonStyle">@style/yourButtonStyle</item>
</style>
<style name="yourButtonStyle" parent="Widget.AppCompat.Button">
<item name="android:textAllCaps">false</item>
</style>
在布局中:
<Button
.
.
style="@style/yourButtonStyle"
.
.
/>
【讨论】:
【参考方案12】:您可以在按钮上添加android:textAllCaps="false"
。
按钮文本可能会被应用到所有按钮的应用主题转换为大写。检查主题/样式文件以设置属性android:textAllCaps
。
【讨论】:
【参考方案13】:在 XML 布局中使用 android.support.v7.widget.AppCompatButton 将使您避免必须使用 layout-21 或以编程方式更改任何内容。当然,这也适用于 AppCompat v7 库。
<android.support.v7.widget.AppCompatButton
android:id="@+id/btnOpenMainDemo"
android:textAllCaps="false"
style="@style/HGButton"
android:layout_
android:layout_
android:text="@string/btn_main_demo"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/>
希望这会有所帮助。
【讨论】:
【参考方案14】:在 Android Studio IDE 中,您必须单击过滤器图标才能显示专家属性。然后您将看到textAllCaps
属性。选中它,然后取消选中它。
【讨论】:
【参考方案15】:如果您到达这里是因为您的 facebook 按钮文本全部大写,那么只需在您的 xml 文件中添加此 android:textAllCaps="false"
。它对我有用。
【讨论】:
【参考方案16】:好的,刚刚遇到这个。 Lollipop 中的按钮全部大写,字体重置为“正常”。但在我的情况下(Android 5.02),它可以在一种布局中正确工作,但不能在另一种布局中正常工作!?更改 API 不起作用。设置为全部大写需要最小 API 14,字体仍会重置到“正常”。这是因为如果没有定义一个样式,Android Material Styles 会强制更改样式(这就是为什么它在我的一个布局中起作用,而在另一个布局中不起作用,因为我定义了一种样式) . 因此,简单的解决方法是在清单中为每个活动定义一个样式,在我的例子中,它只是: android:theme="@android:style/Theme.NoTitleBar.Fullscreen" (希望这对某人有所帮助,昨晚会为我节省几个小时)
【讨论】:
这是一个非常糟糕的尝试,只需为您的按钮创建样式,在 values-21 中设置 allCaps 为 false 的样式。回退到旧的主题(这里是 Holo 主题)会使您的应用更丑陋,对用户来说更不一致。【参考方案17】:如果你使用appcompat-v7
,你可以继承AppCompatButton
和setSupportAllCaps(false)
,然后为你的所有按钮使用这个类。
/**
* Light extension of @link AppCompatButton that overrides ALL CAPS transformation
*/
public class Button extends AppCompatButton
public Button(Context context, AttributeSet attrs)
super(context, attrs);
setSupportAllCaps(false);
public Button(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
setSupportAllCaps(false);
请参阅AppCompatButton#setSupportAllCaps(boolean) Android 文档。
【讨论】:
【参考方案18】:默认情况下,android 中的 Button 提供 all caps 关键字。如果您希望按钮文本为小写或混合大小写,您可以使用 android:textAllCaps="false"
禁用 textAllCaps
标志
【讨论】:
【参考方案19】:我不知道为什么@user1010160 的答案评分为 0。如果我有足够的声望,我会给它 +1。
由于我的应用程序是为小于 14 的 API 设计的,并且我不想在我的程序中添加代码,所以在阅读他的回答之前我没有找到解决方案。他说的是,即使您已经完成了应用程序样式中所需的操作,除非您在活动中添加样式并将 textAllCaps 设置为 false,否则它将无法正常工作。
仅有 Activity 的样式是不够的(我的 Activity 有样式),因为该样式可能默认为 AllCaps 属性。您还必须在活动中明确设置该属性为 false。
我现在在应用程序和清单文件的活动部分都有它。
【讨论】:
【参考方案20】:另一个程序化 Kotlin 替代方案:
mButton.transformationMethod = null
【讨论】:
以上是关于为啥我的 Button 文本在 Lollipop 上强制全部大写?的主要内容,如果未能解决你的问题,请参考以下文章
我的 Material Design ActionBar 或 Lollipop 设备中的 StatusBar 上没有显示颜色,但在 Pre-Lollipop 设备的 ActionBar 中显示。为啥?
Lollipop 上的 Android Button Ripple 和 pre lollipop 上的高亮显示