Perché il testo del mio pulsante è forzato su TUTTO MAIUSCOLO su Lollipop?


448

Nella mia app "Tide Now WA" che ho recentemente testato per la compatibilità utilizzando il nuovo tablet Nexus 9 (Lollipop - API 21).

Scrive del testo del pulsante. Questa app scrive correttamente il testo utilizzando Android 2.3 e Android 4.0. Vale a dire lettere maiuscole e minuscole.

Quando la stessa app viene eseguita sul mio Nexus 9, tutte le lettere nel testo sono in maiuscolo.

FWIW my manifest contiene la seguente dichiarazione:

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

Posso risolvere questo problema nel mio codice o è un bug nel sistema operativo, grazie


Puoi condividere un codice come hai combinato lettere maiuscole e minuscole
N Sharma,

sono definiti nel mio strings.xml come <string name = "r1s1"> Seattle </string>
user1644002

sì. 21. troppo presto per scrivere a destra. Siamo spiacenti
user1644002,

23
Il testo del pulsante è maiuscolo per impostazione predefinita quando si utilizza il tema Materiale (o DeviceDefault con API 21+). Questo funziona come previsto.
alanv,

Risposte:


637

Non ho idea del perché stia accadendo, ma ci sono 3 tentativi banali da fare:

  1. Usa android:textAllCaps="false"nel tuolayout-v21

  2. Modificare a livello di programmazione il metodo di trasformazione del pulsante. mButton.setTransformationMethod(null);

  3. Controlla il tuo stile per Allcaps

Nota : public void setAllCaps(boolean allCaps), android:textAllCapssono disponibili da API versione 14.


# 1 non ha fatto differenza. Non sei sicuro di come fare # 3, non hai stili? Ora provando # 2.
user1644002

2
sì, aggiungendo questo: btn [i] .setTransformationMethod (null); lo fa funzionare grazie
user1644002

2
Accetto la risposta di Nikola come soluzione, ma desidero sottolineare che l'altra parte delle domande è quella fornita da alanv, che ha spiegato il perché nei commenti sopra.
user1644002,

1
Ha funzionato anche per me, ha utilizzato il metodo programmatico poiché l'attrazione XML textAllCaps è supportata solo da API> 14. grazie!
patrickjason91,

3
Ho usato <item name="android:textAllCaps">false</item>nella mia definizione di stile
Someone Somewhere, il

169

Ecco cosa ho fatto nei miei valori / 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
Per il supporto pre-API di livello 14, è possibile utilizzare <item name="textAllCaps">false</item>.
CommonsWare

Questo vale solo per Widget.AppCompat.Button. La risposta più generale è data da Ashish Chaugule di seguito, ovvero aggiungendo direttamente <item name = "android: textAllCaps"> false </item> allo stile del tema. (Sebbene le domande siano state originariamente poste in particolare per i pulsanti, penso che se allCaps non è desiderato per i pulsanti, non lo è nemmeno per le voci di menu, le azioni, ecc.)
user2808624

1
Non ha funzionato per me. È diventato al lavoro quando sono passato buttonStyleaandroid:buttonStyle
Vasily Kabunov il

2
In XML android:textAllCaps="false"(sto usando Android Studio 3.0)
Meyasir

107

Ciò è risolvibile nel codice dell'applicazione impostando il metodo di trasformazione del pulsante, ad es

mButton.setTransformationMethod(null);

Per Kotlin, la sintassi è: mButton.transformationMethod = null
Native_Mobile_Arch_Dev

66

Imposta android: textAllCaps = "false". Se stai usando uno stile di appcompat, assicurati che textAllCaps preceda lo stile. Altrimenti lo stile lo sovrascriverà. Per esempio:

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

Ha funzionato come un fascino, ma nel mio caso ho dovuto fare come: <style name = "textAppearanceButton" parent = "@ android: style / TextAppearance.Material.Widget.Button"> <item name = "android: textAllCaps"> false < / item> </style>
Vfleitao,

58

aggiungi questa linea con stile

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


52
NON SO PERCHÉ HANNO FATTO QUESTO DEFAULT
Glenn Maynard

5
Questo è predefinito nel tema del materiale, poiché si adatta alla natura del design del materiale
QAMAR

povera gente bloccata nella scatola quadrata del disegno materiale
eric

35

questo funziona .... solo nel tuo codice nel tuo codice in basso aggiungi questo:

android:textAllCaps="false"

dovrebbe disattivare la lettera maiuscola che U sta cercando di digitare piccola.


32

Lollipop predefinito viene fornito con "textAllCaps true", quindi è necessario impostarlo manualmente su false


5
È bello sapere. Se esiste un sito che elenca tutti questi valori predefiniti per versione di Android?
Adam,


19

C'è un modo più semplice che funziona per tutti i pulsanti, basta cambiare l'aspetto dei pulsanti nel tema, provare questo:

in valori-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: si consiglia di seguire i principi di progettazione del materiale, è necessario mostrare il testo in maiuscolo in Buttons, http://www.google.com/design/spec/components/buttons.html


2
Sono d'accordo, è bello seguire le linee guida di progettazione ... fino a quando il testo del pulsante non si adatta più al pulsante
Someone Somewhere,

Google dovrebbe semplicemente smettere di parlare di stili - non ero consapevole del fatto che ci fossero pianti e singhiozzi per le strade a causa dei pulsanti minuscoli!
bharal,

11

L'uso di android.support.v7.widget.AppCompatButton nel layout XML ti consentirà di evitare di avere un layout-21 o di modificare in modo programmatico qualsiasi cosa. Naturalmente questo funzionerà anche con la libreria 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"/>

Spero che sia di aiuto.


11

Usa questa linea android: textAllCaps = "false" nel tuo 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

Nell'IDE di Android Studio, devi fare clic sull'icona Filtro per mostrare le proprietà degli esperti. Quindi vedrai la textAllCapsproprietà. Controllalo, quindi deselezionalo.


9

Potresti aggiungere android:textAllCaps="false" al pulsante.

Il testo del pulsante potrebbe essere trasformato in maiuscolo dal tema dell'app che si applica a tutti i pulsanti. Controlla i file di temi / stili per impostare l'attributo android:textAllCaps.


9

Giava:

yourButton.setAllCaps(false);

Kotlin:

yourButton.isAllCaps = false

XML:

android:textAllCaps="false"

stili:

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

Nel layout:

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

4

Se sei arrivato qui perché il testo del tuo pulsante facebook appare in maiuscolo, aggiungi semplicemente questo android:textAllCaps="false"nel tuo file xml. Ha funzionato per me.


2

OK, mi sono appena imbattuto in questo. I pulsanti in Lollipop vengono visualizzati in maiuscolo E il carattere viene ripristinato su "normale". Ma nel mio caso (Android 5.02) funzionava correttamente in un layout, ma non in un altro !?

La modifica delle API non ha funzionato.
L'impostazione su tutti i limiti richiede min API 14 e il carattere si reimposta su "normale".

È perché Android Material Styles forza un cambiamento negli stili se non ce n'è uno definito (ecco perché ha funzionato in uno dei miei layout e non nell'altro perché ho definito uno stile).

Quindi la soluzione semplice è definire uno stile nel manifest per ogni attività che nel mio caso era solo:
android: theme = "@ android: style / Theme.NoTitleBar.Fullscreen"
(spero che questo aiuti qualcuno, mi avrebbe salvato un paio di ore ieri sera)


4
Questo è un brutto tentativo, basta creare stili per i tuoi pulsanti, uno in valori-21 con allCaps falso. Tornare a un tema più vecchio (qui un tema Holo) rende la tua app più brutta e incoerente per l'utente.
Bluetime

2

Se si utilizza appcompat-v7, è possibile eseguire la sottoclasse AppCompatButtone setSupportAllCaps(false), quindi, utilizzare questa classe per tutti i pulsanti.

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

Vedi AppCompatButton # setSupportAllCaps (booleano) documenti Android.


2

Per impostazione predefinita, Button in Android fornisce la parola chiave all caps. Se si desidera che il testo del pulsante sia in lettere minuscole o miste, è possibile disabilitare il textAllCapsflag usandoandroid:textAllCaps="false"


0

Non so perché la risposta di @ user1010160 abbia ottenuto una valutazione di 0. Avrei dato +1 se avessi avuto abbastanza reputazione.

Poiché la mia app è progettata per API inferiori a 14 e non volevo aggiungere codice al mio programma, non ho trovato una soluzione fino a quando non ho letto la sua risposta. Quello che ha detto è che anche se hai fatto ciò che è necessario negli stili dell'applicazione, non funzionerà se non aggiungi uno stile alla tua attività e lì imposti textAllCaps su false.

Non è sufficiente avere uno stile per l'attività (la mia attività aveva uno stile), poiché lo stile potrebbe essere impostato automaticamente sulla proprietà AllCaps. Devi impostare esplicitamente, anche nell'attività, quella proprietà su false.

Ora ho entrambi nelle parti Applicazione e Attività del file manifest.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.