Почему мой текст кнопки вынужден использовать ВСЕ КАПСЫ на леденце?

В моем приложении "Tide Now WA", которое я недавно тестировал на совместимость, использовал новый планшет Nexus 9 (Lollipop - API 21).

Это пишет некоторый текст кнопки. Это приложение правильно пишет текст, используя Android 2.3 и Android 4.0. Т.е. смешанные прописные и строчные буквы.

Когда на моем Nexus 9 запускается одно и то же приложение, все буквы в тексте пишутся с большой буквы.

FWIW мой манифест содержит следующее заявление:

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

Могу ли я исправить это в своем коде или это ошибка в ОС, спасибо

16 ответов

Решение

Это можно исправить в коде приложения, установив TransformationMethod кнопки, например

mButton.setTransformationMethod(null);

Я понятия не имею, почему это происходит, но есть три тривиальные попытки:

  1. использование android:textAllCaps="false" в вашем layout-v21

  2. Программно изменить метод преобразования кнопки. mButton.setTransformationMethod(null);

  3. Проверьте свой стиль для Allcaps

Примечание: public void setAllCaps (логическое allCaps) android:textAllCaps доступны с версии API 14.

Вот что я сделал в своих ценностях /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>

Установите android:textAllCaps="false". Если вы используете стиль appcompat, убедитесь, что textAllCaps предшествует стилю. В противном случае стиль переопределит его. Например:

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

Добавить эту строку в стиле

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

Этот работает.... просто в вашем коде в нижнем коде добавьте этот:

android:textAllCaps="false"

он должен деактивировать заглавные буквы, которые U пытается набрать small .

Используйте эту строку android:textAllCaps="false" в своем xml

<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"
           />

Lollipop по умолчанию поставляется с "textAllCaps true", поэтому вы должны вручную сделать его ложным

Добавить Android:textAllCaps="false" в <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: рекомендуется следовать принципам дизайна материалов, текст должен отображаться заглавными буквами, http://www.google.com/design/spec/components/buttons.html

Джава:

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"
      .
      .
   />

Использование android.support.v7.widget.AppCompatButton в XML-макете позволит вам избежать необходимости иметь 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" на кнопку.

Текст кнопки может быть преобразован в верхний регистр темой приложения, которая применяется ко всем кнопкам. Проверьте темы / файлы стилей для установки атрибута android:textAllCaps,

В Android Studio IDE необходимо щелкнуть значок "Фильтр", чтобы отобразить экспертные свойства. Тогда вы увидите textAllCaps имущество. Проверьте это, затем снимите флажок.

Если вы приехали сюда из-за того, что текст вашей кнопки "Фейсбук" отображается во всех заглавных буквах, просто добавьте android:textAllCaps="false" в вашем XML-файле. Это сработало для меня.

ОК, просто столкнулся с этим. Кнопки в Lollipop отображаются заглавными буквами И шрифт сбрасывается на "нормальный". Но в моем случае (Android 5.02) он работал в одном макете правильно, а не в другом!?

Смена API не сработала.
Установка всех заглавных букв требует минимального API 14, и шрифт все еще сбрасывается на "нормальный".

Это происходит потому, что стили материалов Android изменяют стили, если они не определены (поэтому он работал в одном из моих макетов, а не в другом, потому что я определил стиль).

Таким образом, легко исправить это определить стиль в манифесте для каждого действия, которое в моем случае было просто:
Android: тема ="@ андроид: стиль / Theme.NoTitleBar.Fullscreen"
(надеюсь, это кому-нибудь поможет, я бы спас меня вчера вечером)

По умолчанию, кнопка в Android предоставляет все заглавные буквы. Если вы хотите, чтобы текст кнопки был в нижнем или смешанном регистре, вы можете отключить textAllCaps использование флага android:textAllCaps="false"

Если вы используете 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(логическое) документы для Android.

Другая программная альтернатива Kotlin:

mButton.transformationMethod = null

Я не знаю, почему ответ @user1010160 получил оценку 0. Я бы дал +1, если бы мне хватило репутации.

Поскольку мое приложение разработано для API менее 14, и я не хотел добавлять код в свою программу, я не нашел решения, пока не прочитал его ответ. Он сказал, что, несмотря на то, что вы сделали то, что необходимо в стилях приложения, оно не будет работать, если вы не добавите стиль в свою деятельность и не установите для textAllCaps значение false.

Недостаточно иметь стиль для действия (у моего действия был стиль), потому что стиль может по умолчанию иметь свойство AllCaps. Вы также должны явно установить в этом упражнении это свойство в false.

Теперь он у меня есть как в приложении, так и в частях Activity файла манифеста.

Другие вопросы по тегам