web-dev-qa-db-fra.com

Pourquoi le texte de mon bouton est-il forcé sur ALL CAPS sur Lollipop?

Dans mon application "Tide Now WA" dont j'ai récemment testé la compatibilité avec la nouvelle tablette Nexus 9 (Lollipop - API 21).

Il écrit du texte de bouton. Cette application écrit le texte correctement à l'aide de Android 2.3 et de Android 4.0. C'est à dire. majuscules et minuscules.

Lorsque la même application est exécutée sur mon Nexus 9, toutes les lettres du texte sont en majuscule.

FWIW mon manifeste contient la déclaration suivante:

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

Puis-je résoudre ce problème dans mon code ou s'agit-il d'un bogue dans le fichier O.S. Merci

397
user1644002

Cela peut être corrigé dans le code de l'application en définissant la méthode TransformationMethod du bouton, par exemple.

mButton.setTransformationMethod(null);
101
user1644002

Je ne sais pas pourquoi cela se passe mais il y a 3 tentatives triviales à faire:

  1. Utilisez Android:textAllCaps="false" dans votre layout-v21

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

  3. Vérifiez votre style pour Allcaps

Remarque : public void setAllCaps(boolean allCaps), Android:textAllCaps sont disponible à partir de l'API version 14.

592
Nikola Despotoski

Voici ce que j'ai fait dans mes valeurs/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>
159
miguel

Définissez Android: textAllCaps = "false". Si vous utilisez un style appcompat, assurez-vous que textAllCaps est placé avant le style. Sinon, le style le remplacera. Par exemple:

Android:textAllCaps="false"
style="@style/Base.TextAppearance.AppCompat"
63
Bob bobbington

ajouter cette ligne dans le style

    <item name="Android:textAllCaps">false</item>
55
Ashish Chaugule

celui-ci fonctionne .... juste dans votre code dans votre code du bas ajoutez celui-ci:

Android:textAllCaps="false"

il devrait désactiver la lettre majuscule que U essaie de taper petit.

35
parsa sarshar

Lollipop default est livré avec "textAllCaps true", vous devez donc le définir manuellement sur false

31
tharinduNA

Ajouter Android: textAllCaps = "false" dans la balise <Button> c'est tout.

23
rajlaxmi_jagdale

Il existe un moyen plus simple qui fonctionne pour tous les boutons, il suffit de changer l’apparence des boutons dans votre thème, essayez ceci:

dans values-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 conception des matériaux. Vous devez afficher le texte en majuscule sous la forme de boutons, http://www.google.com/design/spec/components/buttons.html

19
pedroca

L'utilisation de Android.support.v7.widget.AppCompatButton dans la présentation XML vous permettra d'éviter d'avoir à disposer d'une disposition-21 ou de modifier 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 t'aides.

11
user2288580

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

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

9
chakri Reddy

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

8
wisbucky

Si vous êtes arrivé ici parce que le texte de votre bouton facebook apparaît en majuscule, ajoutez simplement ceci Android:textAllCaps="false" dans votre fichier xml. Cela a fonctionné pour moi.

3
war_Hero

OK, juste couru dans cela. Les boutons de Lollipop sortent en majuscules ET la police est réinitialisée à "normale". Mais dans mon cas (Android 5.02), il fonctionnait correctement dans une mise en page, mais pas dans une autre !?

Changer les API ne fonctionnait pas.
La définition de toutes les majuscules nécessite une API minimale de 14 et la police est toujours réinitialisée à "normale".

C'est parce que Android Styles de matériaux impose de modifier les styles s'il n'y en a pas un (c'est pourquoi cela a fonctionné dans l'une de mes mises en page et pas dans l'autre parce que j'ai défini un style) .

La solution de facilité consiste donc à définir un style dans le manifeste pour chaque activité qui, dans mon cas, était simplement:
Android: theme = "@ Android: style/Theme.NoTitleBar.Fullscreen"
(espérons que cela aidera quelqu'un, cela m'aurait épargné quelques heures hier soir)

2
user1010160

Si vous utilisez appcompat-v7, vous pouvez sous-classer AppCompatButton et 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) Android docs.

2
hidro

Par défaut, Bouton dans Android fournit un mot clé en majuscule. Si vous voulez que le texte du bouton soit en minuscule ou en majuscule, vous pouvez désactiver l'indicateur textAllCaps à l'aide de Android:textAllCaps="false".

0
Reyaz Ahmad

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

Étant donné que 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 que 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 peut par défaut être la propriété AllCaps. Vous devez définir explicitement, dans l'activité également, cette propriété sur false.

Je l'ai maintenant dans les parties Application et Activité du fichier manifeste.

0
Zvi