为什么我的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"
我可以在我的代码中修复这个问题,还是在操作系统中的错误,谢谢
我不知道为什么会发生,但有三个小小的尝试:
-
在
layout-v21
使用android:textAllCaps="false"
-
以编程方式更改button的转换方法。
mButton.setTransformationMethod(null);
-
检查你的风格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)
AppCompatButton
和setSupportAllCaps(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。
我现在在清单文件的应用程序和活动部分都有。