Почему мой текст кнопки вынужден все шапки на леденец?
в моем приложении "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 ответов:
Я не знаю, почему это происходит, но есть 3 тривиальные попытки сделать:
использовать
android:textAllCaps="false"
в своемlayout-v21
программно изменить метод преобразования кнопки.
mButton.setTransformationMethod(null);
проверьте свой стиль для 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"
леденец по умолчанию поставляется с "textAllCaps true", так что вы должны вручную сделать его ложным
это работает .... просто в вашем коде в вашем нижнем коде добавьте это:
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.
теперь он есть как в приложении, так и в частях активности файла манифеста.