Почему мой текст кнопки принудительно задействован для ВСЕХ CAPS на Lollipop?

В моем приложении "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"

Могу ли я исправить это в своем коде или это ошибка в O.S. спасибо

Ответ 1

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

mButton.setTransformationMethod(null);

Ответ 2

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

  1. Используйте android:textAllCaps="false" в вашем layout-v21

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

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

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

Ответ 3

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

Ответ 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 пытается напечатать маленьким.

Ответ 7

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

Ответ 8

Добавьте android: textAllCaps = "false" в тег <Button>, который он.

Ответ 9

Существует более простой способ, который работает для всех кнопок, просто измените внешний вид кнопок в вашей теме, попробуйте следующее:

в значения -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

Ответ 10

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

Надеюсь, что это поможет.

Ответ 11

Вы можете добавить android:textAllCaps="false" к кнопке.

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

Ответ 12

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

Ответ 13

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

Ответ 14

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

Ответ 15

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

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

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

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

Ответ 16

Если вы используете 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 docs.

Ответ 17

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

Ответ 18

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

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

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

Теперь я использую его как в разделе "Приложение", так и в разделе "Действия" файла манифеста.