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
16 réponses
Je n'ai pas idée de pourquoi cela se passe mais il y a 3 tentatives triviales à faire:
Utiliser
android:textAllCaps="false"
dans votrelayout-v21
Changer par programme la méthode de transformation du bouton.
mButton.setTransformationMethod(null);
Vérifiez votre style pour Allcaps
Note: public void setAllCaps (boolean allCaps) android: textAllCaps sont disponibles à partir de la version API 14.
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>
Ceci est réparable dans le code de l'application en définissant la méthode TransformationMethod du bouton, par exemple
mButton.setTransformationMethod(null);
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"
Ajouter cette ligne dans le style
<item name="android:textAllCaps">false</item>
Lollipop default est livré avec "textAllCaps true", vous devez donc le rendre manuellement à false
Ajouter android:textAllCaps="false" dans <Button>
tag c'est tout.
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 .
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
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.
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.
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
.
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)
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.
Si vous utilisez appcompat-v7
, vous pouvez sous-classe 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) docs Android.
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.