【问题标题】: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 中定义,例如 Seattle
  • 是的。 21. 打字太早了。对不起
  • 在使用 Material(或 API 21+ 的 DeviceDefault)主题时,按钮文本默认为全大写。这按预期工作。
  • 非常有用的问题。谢谢

标签: android android-5.0-lollipop android-button android-styles


【解决方案1】:

我不知道为什么会这样,但有 3 次微不足道的尝试:

  1. 在您的layout-v21 中使用android:textAllCaps="false"

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

  3. 检查你的全大写风格

注意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 支持,您可以使用&lt;item name="textAllCaps"&gt;false&lt;/item&gt;
  • 这仅适用于 Widget.AppCompat.Button。下面的 Ashish Chaugule 给出了更一般的答案,即直接将 false 添加到主题样式中。 (虽然这些问题最初是专门针对按钮提出的,但我认为如果按钮不需要 allCaps,菜单项、操作等也不需要。)
  • 对我不起作用。当我将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_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/login_str"
                android:background="@color/colorBlue"
                android:textColor="@color/colorWhite"
                android:textAllCaps="false"
               />
    

    【讨论】:

    • 非常有用的答案。谢谢
    【解决方案9】:

    &lt;Button&gt; 标签中添加 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_width="wrap_content"
              android:layout_height="wrap_content"
              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,你可以继承AppCompatButtonsetSupportAllCaps(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

                      【讨论】:

                        猜你喜欢
                        • 2015-01-21
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-08-28
                        • 2011-01-02
                        • 1970-01-01
                        • 2018-03-11
                        • 2013-04-29
                        • 2019-03-14
                        相关资源
                        最近更新 更多