Почему мой текст кнопки вынужден использовать ВСЕ КАПСЫ на леденце?
В моем приложении "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 ответов
Это можно исправить в коде приложения, установив TransformationMethod кнопки, например
mButton.setTransformationMethod(null);
Я понятия не имею, почему это происходит, но есть три тривиальные попытки:
использование
android:textAllCaps="false"
в вашемlayout-v21
Программно изменить метод преобразования кнопки.
mButton.setTransformationMethod(null);
Проверьте свой стиль для Allcaps
Примечание: public void setAllCaps (логическое 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>
Установите android:textAllCaps="false". Если вы используете стиль appcompat, убедитесь, что textAllCaps предшествует стилю. В противном случае стиль переопределит его. Например:
android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
Добавить эту строку в стиле
<item name="android:textAllCaps">false</item>
Этот работает.... просто в вашем коде в нижнем коде добавьте этот:
android:textAllCaps="false"
он должен деактивировать заглавные буквы, которые U пытается набрать small .
Используйте эту строку android:textAllCaps="false" в своем xml
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_str"
android:background="@color/colorBlue"
android:textColor="@color/colorWhite"
android:textAllCaps="false"
/>
Lollipop по умолчанию поставляется с "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
Джава:
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"
.
.
/>
Использование 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"/>
Надеюсь это поможет.
Вы могли бы добавить android:textAllCaps="false"
на кнопку.
Текст кнопки может быть преобразован в верхний регистр темой приложения, которая применяется ко всем кнопкам. Проверьте темы / файлы стилей для установки атрибута android:textAllCaps
,
В Android Studio IDE необходимо щелкнуть значок "Фильтр", чтобы отобразить экспертные свойства. Тогда вы увидите textAllCaps
имущество. Проверьте это, затем снимите флажок.
Если вы приехали сюда из-за того, что текст вашей кнопки "Фейсбук" отображается во всех заглавных буквах, просто добавьте android:textAllCaps="false"
в вашем XML-файле. Это сработало для меня.
ОК, просто столкнулся с этим. Кнопки в Lollipop отображаются заглавными буквами И шрифт сбрасывается на "нормальный". Но в моем случае (Android 5.02) он работал в одном макете правильно, а не в другом!?
Смена API не сработала.
Установка всех заглавных букв требует минимального API 14, и шрифт все еще сбрасывается на "нормальный".
Это происходит потому, что стили материалов Android изменяют стили, если они не определены (поэтому он работал в одном из моих макетов, а не в другом, потому что я определил стиль).
Таким образом, легко исправить это определить стиль в манифесте для каждого действия, которое в моем случае было просто:
Android: тема ="@ андроид: стиль / Theme.NoTitleBar.Fullscreen"
(надеюсь, это кому-нибудь поможет, я бы спас меня вчера вечером)
По умолчанию, кнопка в Android предоставляет все заглавные буквы. Если вы хотите, чтобы текст кнопки был в нижнем или смешанном регистре, вы можете отключить textAllCaps
использование флага android:textAllCaps="false"
Если вы используете 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(логическое) документы для Android.
Другая программная альтернатива Kotlin:
mButton.transformationMethod = null
Я не знаю, почему ответ @user1010160 получил оценку 0. Я бы дал +1, если бы мне хватило репутации.
Поскольку мое приложение разработано для API менее 14, и я не хотел добавлять код в свою программу, я не нашел решения, пока не прочитал его ответ. Он сказал, что, несмотря на то, что вы сделали то, что необходимо в стилях приложения, оно не будет работать, если вы не добавите стиль в свою деятельность и не установите для textAllCaps значение false.
Недостаточно иметь стиль для действия (у моего действия был стиль), потому что стиль может по умолчанию иметь свойство AllCaps. Вы также должны явно установить в этом упражнении это свойство в false.
Теперь он у меня есть как в приложении, так и в частях Activity файла манифеста.