为什么我的Button文本被强制设为棒棒糖上的所有大写?

在我最近使用新的Nexus 9平板电脑(Lollipop – API 21)testing兼容性的应用程序“Tide Now WA”中。

它写了一些button的文字。 这个应用程序使用Android 2.3和Android 4.0正确写入文本。 即混合资本和小写字母。

当我的Nexus 9上运行相同的应用程序时,文本中的所有字母都是大写的。

FWIW我的清单包含以下声明:

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"

我可以在我的代码中修复这个问题,还是在操作系统中的错误,谢谢

我不知道为什么会发生,但有三个小小的尝试:

  1. layout-v21使用android:textAllCaps="false"

  2. 以编程方式更改button的转换方法。 mButton.setTransformationMethod(null);

  3. 检查你的风格Allcaps

注意 : public void setAllCaps(boolean allCaps)android:textAllCaps可从API版本14获得。

这是我在我的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> 

这可以通过设置button的TransformationMethod在应用程序代码中修复,例如

 mButton.setTransformationMethod(null); 

设置android:textAllCaps =“false”。 如果您使用的是appcompat样式,请确保textAllCaps出现在样式之前。 否则,样式将覆盖它。 例如:

 android:textAllCaps="false" style="@style/Base.TextAppearance.AppCompat" 

在样式中添加此行

  <item name="android:textAllCaps">false</item> 

Lollipop默认带有“textAllCaps true”,所以你必须手动将其设置为false

<Button>标记中添加android:textAllCaps =“false”即可。

有一个简单的方法适用于所有的button,只是改变你的主题button的外观,试试这个:

值-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:build议遵循材料devise的原则,您应该在button中显示大写的文字, http://www.google.com/design/spec/components/buttons.html

在Android Studio IDE中,您必须单击“filter”图标以显示专家属性。 然后你会看到textAllCaps属性。 检查它,然后取消选中它。

你可以添加android:textAllCaps="false"到button。

button文本可能会被转换为适用于所有button的应用程序主题的大写字母。 检查设置属性android:textAllCaps主题/样式文件。

在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_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn_main_demo" android:layout_centerHorizontal="true" android:layout_centerVertical="true"/> 

希望这可以帮助。

这是一个工作….只是在你的代码在你的底部代码添加这一个:

 android:textAllCaps="false" 

它应该停用U试图键入小写字母的字母。

好的,就碰到这个。 棒棒糖中的button全部大写,字体重置为“正常”。 但在我的情况(Android 5.02),它正确地在一个布局,但不是另一个!?

更改API不起作用。
设置为全部大写需要最小的API 14,字体仍然重置为“正常”。

这是因为如果没有定义,Android材质样式会强制更改样式(这是为什么它在我的布局中工作的原因,而不是另一种,因为我定义了样式)。

所以简单的解决方法是在清单中为每个活动定义一个样式,这在我的情况下就是:
机器人:主题= “@安卓风格/ Theme.NoTitleBar.Fullscreen”
(希望这可以帮助某人,昨晚会节省我几个小时)

如果你已经到达这里,因为你的Facebookbutton文本出现在所有大写,那么只需在你的XML文件中添加这个android:textAllCaps="false" 。 它为我工作。

如果使用appcompat-v7 ,则可以setSupportAllCaps(false) AppCompatButtonsetSupportAllCaps(false) ,然后使用该类来处理所有button。

 /** * 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文档。

我不知道为什么@ user1010160的回答得到0分。如果我有足够的声望,我会给+1。

由于我的应用程序是专为API不到14,我不想添加代码到我的程序,我没有find一个解决scheme,直到我看到他的答案。 他说的是,即使你已经完成了应用程序样式中的需要,除非你为你的活动添加一个样式,并且在那里你设置textAllCaps为false,否则它将不起作用。

为活动创build样式(我的活动具有样式)是不够的,因为样式可能默认为AllCaps属性。 您也必须在活动中明确地设置该属性为false。

我现在在清单文件的应用程序和活动部分都有。