Pourquoi mon texte de bouton est-il forcé à tous les majuscules sur Lollipop?

Dans mon application "Tide Now WA" {[3] } que j'ai récemment testé pour la compatibilité en utilisant la nouvelle tablette Nexus 9 (Lollipop-API 21).

Il écrit du texte de bouton. Cette application écrit le texte correctement en utilisant Android 2.3 et Android 4.0. I. e. mixte lettres majuscules et minuscules.

Lorsque même application est exécutée sur mon Nexus 9 toutes les lettres dans le texte sont capitalisés.

FWIW mon manifeste contient l'instruction suivante:

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

Puis-je résoudre ce problème dans mon code ou est-ce un bug dans le O. S. merci

347
demandé sur Community 2014-11-16 18:59:04

16 réponses

Je n'ai pas idée de pourquoi cela se passe mais il y a 3 tentatives triviales à faire:

  1. Utiliser android:textAllCaps="false" dans votre layout-v21

  2. Changer par programme la méthode de transformation du bouton. mButton.setTransformationMethod(null);

  3. Vérifiez votre style pour Allcaps

Note: public void setAllCaps (boolean allCaps) android: textAllCaps sont disponibles à partir de la version API 14.

521
répondu Nikola Despotoski 2015-05-22 12:23:33

Voici ce que j'ai fait dans mes valeurs/thèmes.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>
134
répondu miguel 2017-12-26 21:08:47

Ceci est réparable dans le code de l'application en définissant la méthode TransformationMethod du bouton, par exemple

mButton.setTransformationMethod(null);
97
répondu user1644002 2015-08-26 04:57:35

Définir android: textAllCaps= "false". Si vous utilisez un style appcompat, assurez-vous que textAllCaps vient avant le style. Sinon, le style le remplacera. Par exemple:

android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
61
répondu Bob bobbington 2015-03-19 16:16:55

Ajouter cette ligne dans le style

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

52
répondu Ashish Chaugule 2016-02-16 06:34:01

Lollipop default est livré avec "textAllCaps true", vous devez donc le rendre manuellement à false

30
répondu tharinduNA 2014-12-21 17:02:56

Ajouter android:textAllCaps="false" dans <Button> tag c'est tout.

21
répondu rajlaxmi_jagdale 2016-02-10 17:38:25

Celui-ci fonctionne .... juste dans votre code dans votre code inférieur ajoutez celui - ci:

android:textAllCaps="false"

Il devrait désactiver la lettre de majuscules que vous essayez de taper small .

21
répondu parsa sarshar 2017-10-23 15:20:27

Il y a un moyen plus facile qui fonctionne pour tous les boutons, il suffit de changer l'apparence des boutons dans votre thème, Essayez ceci:

Dans valeurs-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: il est recommandé de suivre les principes de material design, vous devez afficher le texte en majuscule dans les boutons, http://www.google.com/design/spec/components/buttons.html

19
répondu pedroca 2015-06-03 16:21:15

Utilisation de l'android.soutien.v7.widget.AppCompatButton dans la mise en page XML vous permettra d'éviter d'avoir à avoir une mise en page-21 ou de changer quoi que ce soit par programme. Naturellement, cela fonctionnera également avec la bibliothèque 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"/>

J'espère que cela aide.

9
répondu user2288580 2017-04-30 22:13:31

Dans Android Studio IDE, vous devez cliquer sur L'icône de filtre pour afficher les propriétés d'expert. Ensuite, vous verrez la propriété textAllCaps. Cochez-le, puis décochez-le.

8
répondu wisbucky 2015-04-28 21:35:33

Vous pouvez ajouter android:textAllCaps="false" au bouton.

Le texte du bouton peut être transformé en majuscules par le thème de votre application qui s'applique à tous les boutons. Vérifiez les fichiers thèmes / styles pour définir l'attribut android:textAllCaps.

8
répondu chakri Reddy 2016-02-05 10:32:55

OK, juste couru dans ce. Les boutons de Lollipop sortent tous en majuscules et la police se réinitialise à 'normal'. Mais dans mon cas (Android 5.02), il fonctionnait correctement dans une mise en page, mais pas une autre!?

changer les API n'a pas fonctionné.
Le réglage de toutes les majuscules nécessite min API 14 et la police se réinitialise toujours à 'normal'.

C'est parce que les styles de matériaux Android forcent un changement aux styles s'il n'y en a pas défini (c'est pourquoi cela a fonctionné dans l'une de mes mises en page et pas l'autre parce que je définit un style).

Donc, la solution facile est de définir un style dans le manifeste, pour chaque activité, ce qui dans mon cas était juste:
android:thème="@android:style/Thème.NoTitleBar.Plein écran "
(j'espère que cela aide quelqu'un, m'aurait sauvé quelques heures la nuit dernière)

2
répondu user1010160 2015-03-11 02:12:05

Si vous êtes arrivé ici parce que le texte de votre bouton facebook apparaît en majuscules, Ajoutez simplement android:textAllCaps="false" dans votre fichier xml. Il a travaillé pour moi.

2
répondu war_Hero 2015-03-17 05:26:49

Si vous utilisez appcompat-v7, vous pouvez sous-classe AppCompatButtonet setSupportAllCaps(false), puis utiliser cette classe pour tous vos boutons.

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

Voir AppCompatButton # setSupportAllCaps (boolean) docs Android.

2
répondu hidro 2016-01-11 04:37:57

Je ne sais pas pourquoi la réponse de @ user1010160 a obtenu une note de 0. Je l'aurais donné + 1 si j'avais assez de réputation.

Comme mon application est conçue pour une API inférieure à 14 et que je ne voulais pas ajouter de code à mon programme, je n'ai pas trouvé de solution avant d'avoir lu sa réponse. Ce qu'il a dit, c'est que même si vous avez fait ce qui est nécessaire dans les styles D'Application, cela ne fonctionnera pas sauf si vous ajoutez un style à votre activité et que vous définissez textAllCaps sur false.

, Il ne suffit pas d'avoir un style pour l'activité (mon activité avait un style), car le style pourrait par défaut être la propriété AllCaps. Vous devez définir explicitement, dans l'activité aussi, cette propriété à false.

Je l'ai maintenant à la fois dans L'Application et dans les parties D'activité du fichier manifeste.

0
répondu Zvi 2015-09-04 18:40:10