it-swarm.com.ru

Почему на кнопке «Текст» кнопки «ВСЕ КОПЫ» на 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. Спасибо

386
user1644002

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

mButton.setTransformationMethod(null);
101
user1644002

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

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

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

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

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

574
Nikola Despotoski

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

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

Android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
62
Bob bobbington

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

    <item name="Android:textAllCaps">false</item>
54
Ashish Chaugule

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

Android:textAllCaps="false"

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

31
parsa sarshar

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

31
tharinduNA

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

23
rajlaxmi_jagdale

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

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

19
pedroca

Использование 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"/>

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

10
user2288580

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

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

8
chakri Reddy

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

8
wisbucky

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

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

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

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

2
user1010160

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

2
war_Hero

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

2
hidro

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

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

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

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

0
Zvi