Ответ 1
Это можно зафиксировать в коде приложения, установив кнопку TransformationMethod, например.
mButton.setTransformationMethod(null);
В моем приложении "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. спасибо
Это можно зафиксировать в коде приложения, установив кнопку TransformationMethod, например.
mButton.setTransformationMethod(null);
Я понятия не имею, почему это происходит, но есть три тривиальные попытки:
Используйте android:textAllCaps="false"
в вашем layout-v21
Программно изменить метод преобразования кнопки. mButton.setTransformationMethod(null);
Проверьте свой стиль для 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>
Установите android: textAllCaps = "false". Если вы используете стиль appcompat, убедитесь, что textAllCaps предшествует стилю. В противном случае стиль переопределит его. Например:
android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
добавить эту строку в стиле
<item name="android:textAllCaps">false</item>
этот работает... только в коде вашего нижнего кода добавьте этот код:
android:textAllCaps="false"
он должен деактивировать букву с буквами, которую U пытается напечатать маленьким.
Значение 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
Использование 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"/>
Надеюсь, что это поможет.
Вы можете добавить android:textAllCaps="false"
к кнопке.
Текст кнопки может быть преобразован в верхний регистр с помощью темы приложения, которая применяется ко всем кнопкам. Проверьте файлы тем/стилей для установки атрибута android:textAllCaps
.
В Android Studio IDE вам нужно щелкнуть значок "Фильтр", чтобы показать свойства эксперта. Затем вы увидите свойство textAllCaps
. Проверьте его, затем снимите флажок.
Если вы пришли сюда, потому что ваш текст кнопки facebook появляется во всех шапках, просто добавьте этот android:textAllCaps="false"
в свой XML файл. Это сработало для меня.
Java:
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"
.
.
/>
Хорошо, просто наткнулся на это. Кнопки в Lollipop выдают все прописные буквы, а шрифт сбрасывается до "нормального". Но в моем случае (Android 5.02) он работал в одном макете правильно, но не в другом!
Изменение API-интерфейсов не помогло.
Для установки всех кепок требуется минимум API 14, а шрифт все еще сбрасывается для "нормального".
Это потому, что стили Android Material заставляют менять стили, если нет ни одного определенного (почему он работал в одном из моего макета, а не в другом, потому что я определил стиль)
Итак, легкое решение - определить стиль в манифесте для каждого вида деятельности, который в моем случае был просто:
android: theme = "@android: style/Theme.NoTitleBar.Fullscreen"
(надеюсь, что это поможет кому-то, спало бы мне пару часов прошлой ночью)
Если вы используете 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.
По умолчанию, кнопка в Android предоставляет все заглавные буквы. Если вы хотите, чтобы текст кнопки был в нижнем или смешанном регистре, вы можете отключить флаг textAllCaps
с помощью android:textAllCaps="false"
Я не знаю, почему ответ @user1010160 получил рейтинг 0. Я бы дал ему +1, если бы у меня было достаточно репутации.
Так как мое приложение предназначено для API меньше 14, и я не хочу добавлять код в свою программу, я не нашел решение, пока не прочитаю его ответ. Он сказал, что даже если вы сделали то, что необходимо в стилях приложения, это не сработает, если вы не добавите стиль в свою деятельность, и там вы установите textAllCaps на false.
Недостаточно иметь стиль для действия (у моей активности был стиль), потому что стиль может по умолчанию соответствовать свойству AllCaps. Вы также должны явно указать в свойстве это свойство на false.
Теперь я использую его как в разделе "Приложение", так и в разделе "Действия" файла манифеста.