¿Por qué se fuerza el texto de mi Botón a TODAS LAS MAYÚSCULAS en Lollipop?


447

En mi aplicación "Tide Now WA", que recientemente probé para compatibilidad usando la nueva tableta Nexus 9 (Lollipop - API 21).

Escribe un texto de botón. Esta aplicación escribe el texto correctamente con Android 2.3 y Android 4.0. Es decir, letras mayúsculas y minúsculas mixtas.

Cuando se ejecuta la misma aplicación en mi Nexus 9, todas las letras del texto aparecen en mayúscula.

FWIW mi manifiesto contiene la siguiente declaración:

uses-sdk android:minSdkVersion="10" android:targetSdkVersion="14"

¿Puedo arreglar esto en mi código o es un error en el sistema operativo gracias


¿Puedes compartir un código? ¿Cómo combinaste mayúsculas y minúsculas?
N Sharma

se definen en mi strings.xml como <string name = "r1s1"> Seattle </string>
user1644002

si. 21. demasiado temprano para escribir a la derecha. Lo sentimos
usuario 1644002

23
El texto del botón es todo en mayúsculas de forma predeterminada cuando se usa el tema Material (o DeviceDefault con API 21+). Esto está funcionando según lo previsto.
alanv

Respuestas:


636

No tengo idea de por qué está sucediendo, pero hay 3 intentos triviales de hacer:

  1. Uso android:textAllCaps="false"en sulayout-v21

  2. Cambie programáticamente el método de transformación del botón. mButton.setTransformationMethod(null);

  3. Comprueba tu estilo para Allcaps

Nota : public void setAllCaps(boolean allCaps), android:textAllCapsestán disponibles desde la versión de la API 14.


# 1 no hizo ninguna diferencia. ¿No estás seguro de cómo hacer # 3, no tienes estilos? Ahora intentando # 2.
user1644002

2
sí, agregando esto: btn [i] .setTransformationMethod (nulo); lo hace funcionar gracias
user1644002

2
Acepto la respuesta de Nikola como la solución, pero quiero señalar que la otra parte de las preguntas es la proporcionada por alanv, quien explicó el por qué en los comentarios anteriores.
user1644002

1
También funcionó para mí, utilicé el método programático ya que textAllCaps XML attr solo es compatible con API> 14. ¡gracias!
patrickjason91

3
Utilicé <item name="android:textAllCaps">false</item>en mi definición de estilo
alguien en algún lugar el

169

Esto es lo que hice en my values ​​/ 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>

8
Para el soporte previo al API Nivel 14, puede usar <item name="textAllCaps">false</item>.
CommonsWare

Esto solo se aplica a Widget.AppCompat.Button. Ashish Chaugule da la respuesta más general a continuación, es decir, agregar directamente <item name = "android: textAllCaps"> false </item> al estilo del tema. (Aunque las preguntas se hicieron originalmente especialmente para botones, creo que si allCaps no se desea para botones, tampoco se desea para elementos de menú, acciones, etc.)
user2808624

1
No funciono para mi. Empecé a trabajar cuando me cambié buttonStyleaandroid:buttonStyle
Vasily Kabunov

2
En XML android:textAllCaps="false"(estoy usando android studio 3.0)
meyasir

107

Esto se puede corregir en el código de la aplicación configurando el Método de transformación del botón, p. Ej.

mButton.setTransformationMethod(null);

Para Kotlin, la sintaxis es: mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

Establezca android: textAllCaps = "false". Si está utilizando un estilo appcompat, asegúrese de que textAllCaps esté antes del estilo. De lo contrario, el estilo lo anulará. Por ejemplo:

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

Funcionó de maravilla, pero en mi caso tuve que hacer como: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> false < / item> </style>
Vfleitao

58

agrega esta línea con estilo

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


52
NO SÉ POR QUÉ HICIERON ESTO ES EL PREDETERMINADO
Glenn Maynard

55
Este es el tema predeterminado del material, ya que se adapta a la naturaleza del diseño del material
QAMAR

pobres atrapados en la caja cuadrada de diseño de materiales
eric

35

este está funcionando ... solo en su código en su código inferior agregue este:

android:textAllCaps="false"

debería desactivar la letra mayúscula que U intenta escribir en letra pequeña.


32

El valor predeterminado de Lollipop viene con "textAllCaps true", por lo que debe convertirlo en falso manualmente


55
Eso es genial saberlo. Si hay un sitio que enumera todos estos valores predeterminados por versión de Android?
Adam


19

Hay una manera más fácil que funciona para todos los botones, solo cambie la apariencia de los botones en su tema, intente esto:

en valores-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>

PD: se recomienda seguir los principios de diseño de materiales, debe mostrar texto en mayúsculas en Botones, http://www.google.com/design/spec/components/buttons.html


2
Estoy de acuerdo, es genial seguir las pautas de diseño ... hasta que el texto del botón ya no entre en el botón
Someone Somewhere

Google debería dejar de hablar de estilos: ¡no sabía que había gente llorando y sollozando en las calles debido a los botones en minúsculas!
bharal

11

El uso de android.support.v7.widget.AppCompatButton en el diseño XML le permitirá evitar tener que tener un diseño 21 o cambiar algo programáticamente. Naturalmente, esto también funcionará con la biblioteca 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"/>

Espero que esto ayude.


11

Utilice esta línea android: textAllCaps = "false" en su 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"
           />

9

En Android Studio IDE, debe hacer clic en el icono Filtro para mostrar propiedades expertas. Luego verá la textAllCapspropiedad. Verifíquelo, luego desactívelo.


9

Podrías agregar android:textAllCaps="false"al botón.

El texto del botón puede transformarse a mayúsculas por el tema de su aplicación que se aplica a todos los botones. Verifique los archivos de temas / estilos para configurar el atributo android:textAllCaps.


9

Java:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

Estilos:

    <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>

En diseño:

   <Button
      .
      .
      style="@style/yourButtonStyle"
      .
      .
   />

4

Si ha llegado aquí porque el texto de su botón de Facebook aparece en mayúsculas, simplemente agregue esto android:textAllCaps="false"en su archivo xml. Funcionó para mi.


2

OK, acabo de encontrarme con esto. Los botones en Lollipop salen en mayúsculas Y la fuente se restablece a 'normal'. ¿Pero en mi caso (Android 5.02) funcionaba correctamente en un diseño, pero no en otro?

El cambio de API no funcionó.
La configuración en mayúsculas requiere una API 14 mínima y la fuente aún se restablece a 'normal'.

Se debe a que los Estilos de material de Android fuerzan un cambio en los estilos si no hay uno definido (es por eso que funcionó en uno de mis diseños y no en el otro porque definí un estilo).

Entonces, la solución fácil es definir un estilo en el manifiesto para cada actividad que en mi caso fue simplemente:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(espero que esto ayude a alguien, me habría ahorrado un par de horas anoche)


44
Es un intento muy malo, solo crea estilos para tus botones, uno en valores-21 que tenga todas las mayúsculas falsas. Volver a un tema anterior (aquí un tema Holo) hace que su aplicación sea más fea e inconsistente para el usuario.
bluewhile

2

Si lo usa appcompat-v7, puede subclasificar AppCompatButtony setSupportAllCaps(false)luego usar esta clase para todos sus botones.

/**
 * 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);
    }
}

Ver AppCompatButton # setSupportAllCaps (boolean) documentos de Android.


2

De forma predeterminada, Button en Android proporciona todas las palabras clave mayúsculas. Si desea que el texto del botón esté en minúsculas o en mayúsculas, puede deshabilitar la textAllCapsmarca usandoandroid:textAllCaps="false"


0

No sé por qué la respuesta de @ user1010160 obtuvo una calificación de 0. Le hubiera dado +1 si tuviera suficiente reputación.

Como mi aplicación está diseñada para API menores de 14 y no quería agregar código a mi programa, no encontré una solución hasta que leí su respuesta. Lo que dijo fue que, aunque haya hecho lo que se necesita en los estilos de la Aplicación, no funcionará a menos que agregue un estilo a su actividad y establezca textAllCaps en falso.

No es suficiente tener un estilo para la actividad (mi actividad tenía un estilo), porque el estilo puede ser el valor predeterminado de la propiedad AllCaps. Debe establecer explícitamente, también en la actividad, esa propiedad en falso.

Ahora lo tengo tanto en la aplicación como en las partes de actividad del archivo de manifiesto.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.