Почему мой текст кнопки вынужден все шапки на леденец?


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

16 ответов:

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

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

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

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

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

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

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

mButton.setTransformationMethod(null);

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

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

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

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

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

добавить android: textAllCaps= "false" в <Button> тег вот и все.

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

android:textAllCaps="false"

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

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

in значения-21/стили.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, вы должны показывать заглавный текст в кнопках,http://www.google.com/design/spec/components/buttons.html

С помощью android.поддержка.v7.штучка.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"/>

надеюсь, что это помогает.

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

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

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

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

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

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

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

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

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

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

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

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

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