Почему мой текст кнопки принудительно задействован для ВСЕХ 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"

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

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

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

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

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

Примечание : public void setAllCaps (boolean 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> 

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

 mButton.setTransformationMethod(null); 

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

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

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

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

Lollipop default поставляется с «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.

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

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

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

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

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

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

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

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

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

Если вы пришли сюда, потому что ваш текст кнопки 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-документы.

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

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

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

Теперь у меня есть это как в приложении, так и в разделе «Действия» файла манифеста.

Intereting Posts
Titanium Создание файла изображения: file.write (blob), не создающий правильный файл SQLiteDatabase: Вставить только в том случае, если значение не существует (не через команду raw SQL) Android BLE Gatt timeout после gatt.writeDescriptor () Как передать несколько параметров URL-адресам IPN в PayPal на Android? Как я могу получить обои телефона в Android? Разработка Android: наличие AsyncTask в отдельном файле класса Нажатие на пункт меню в панели действий с эспрессо при использовании onView (withId (…)) Требовать от пользователей удаления предыдущей версии приложения для Android при обновлении Проблема раздувания MapView Как подключить Nexus 7 к ADT в vmware Windows guest Стандартный пользовательский клик для Android Диалоговое окно тестирования в ActivityUnitTestCase от Android Могу ли я обнаружить, когда мой сервис убит с помощью «Advanced Task Killer» AccessibilityService запущен, но не получает AccessibilityEvents на JellyBean GCM имеет лимит в 1000 пользователей. Что делать, если нам нужно больше?