Existe-t-il un moyen de styliser un TextView pour mettre en majuscule toutes ses lettres?

Je voudrais pouvoir atsortingbuer un atsortingbut ou un style xml à un TextView qui fera le texte qu’il contient dans TOUTES LES LETTRES MAJUSCULES.

Les atsortingbuts android:inputType="textCapCharacters" et android:capitalize="characters" ne font rien et ressemblent à du texte saisi par l’utilisateur, pas à un TextView .

Je voudrais le faire pour séparer le style du contenu. Je sais que je pourrais le faire par programmation, mais encore une fois, je veux garder le style hors du contenu et du code.

Je pensais que c’était une demande assez raisonnable, mais on dirait que vous ne pouvez pas le faire en ce moment. Quel échec total. lol

Mettre à jour

Vous pouvez maintenant utiliser textAllCaps pour forcer tous les majuscules.

Qu’en est-il d’ android: textAllCaps ?

En utilisant AppCompat textAllCaps dans les applications Android prenant en charge les anciennes API (moins de 14)

Il existe une interface utilisateur fournie avec AppCompat, nommée CompatTextView, une extension Custom TextView qui prend en charge textAllCaps.

Pour les nouvelles API Android> 14, vous pouvez utiliser:

 android:textAllCaps="true" 

Un exemple simple:

  

Source: developer.android

Mettre à jour:

Comme cela arrive, CompatTextView a été remplacé par AppCompatTextView dans la dernière bibliothèque appcompat-v7 ~ Eugen Pechanec

Il est vraiment très décevant que vous ne puissiez pas le faire avec les styles ( true ) ou sur chaque fichier de disposition XML avec l’atsortingbut textAllCaps , et la seule façon de le faire est En fait, vous utilisez theSsortingng.toUpperCase () sur chacune des chaînes lorsque vous faites un textViewXXX.setText (theSsortingng).

En ce qui me concerne, je ne voulais pas avoir le singe.toUpperCase () partout dans mon code, mais avoir un endroit centralisé pour le faire parce que j’avais des activités et des listes d’éléments avec TextViews qui devaient toujours être en majuscule (un title) et d’autres qui n’ont pas … donc … certaines personnes peuvent penser que c’est une erreur, mais j’ai créé ma propre classe CapitalizedTextView en étendant android.widget.TextView et en remplaçant la méthode setText en capitalisant le texte à la volée.

Au moins, si la conception change ou si je dois supprimer le texte en majuscules dans les versions futures, il me suffit de passer à TextView normal dans les fichiers de mise en page.

Maintenant, prenez en compte que je l’ai fait parce que le concepteur de l’application voulait réellement ce texte (les titres) dans CAPS dans toute l’application, peu importe la capitalisation du contenu original, et j’avais d’autres textViews normales avec le contenu réel .

Ceci est la classe:

 package com.realactionsoft.android.widget; import android.content.Context; import android.util.AtsortingbuteSet; import android.view.ViewTreeObserver; import android.widget.TextView; public class CapitalizedTextView extends TextView implements ViewTreeObserver.OnPreDrawListener { public CapitalizedTextView(Context context) { super(context); } public CapitalizedTextView(Context context, AtsortingbuteSet attrs) { super(context, attrs); } public CapitalizedTextView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void setText(CharSequence text, BufferType type) { super.setText(text.toSsortingng().toUpperCase(), type); } } 

Et chaque fois que vous en avez besoin, déclarez-le simplement avec tout le package dans la mise en page XML:

  

Certains diront que la manière correcte de styler le texte sur un TextView est d’utiliser un SpannableSsortingng , mais je pense que ce serait encore plus compliqué, sans parler de plus de ressources car vous instanciez une autre classe que TextView.

J’ai mis au point une solution similaire à celle de RacZo dans le fait que j’ai également créé une sous-classe de TextView qui gère la création du texte en majuscule.

La différence est qu’au lieu de remplacer l’une des méthodes setText() , j’ai utilisé une approche similaire à celle de TextView sur l’API 14+ (ce qui, à mon avis, est une solution plus propre).

Si vous examinez la source , vous verrez l’implémentation de setAllCaps() :

 public void setAllCaps(boolean allCaps) { if (allCaps) { setTransformationMethod(new AllCapsTransformationMethod(getContext())); } else { setTransformationMethod(null); } } 

La classe AllCapsTransformationMethod n’est pas (actuellement) publique, mais la source est également disponible . J’ai un peu simplifié cette classe (suppression de la méthode setLengthChangesAllowed() ), la solution complète est donc la suivante:

 public class UpperCaseTextView extends TextView { public UpperCaseTextView(Context context) { super(context); setTransformationMethod(upperCaseTransformation); } public UpperCaseTextView(Context context, AtsortingbuteSet attrs) { super(context, attrs); setTransformationMethod(upperCaseTransformation); } public UpperCaseTextView(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); setTransformationMethod(upperCaseTransformation); } private final TransformationMethod upperCaseTransformation = new TransformationMethod() { private final Locale locale = getResources().getConfiguration().locale; @Override public CharSequence getTransformation(CharSequence source, View view) { return source != null ? source.toSsortingng().toUpperCase(locale) : null; } @Override public void onFocusChanged(View view, CharSequence sourceText, boolean focused, int direction, Rect previouslyFocusedRect) {} }; } 

Le projet PixlUI vous permet d’utiliser textAllCaps dans n’importe quelle textview ou sous-classe de textview, notamment: Button, EditText AutoCompleteEditText Case à cocher RadioButton et plusieurs autres.

Vous devrez créer vos vues de texte en utilisant la version pixlui plutôt que celles de la source Android, ce qui signifie que vous devez le faire:

  

PixlUI vous permet également de définir une police de caractères / police personnalisée que vous mettez dans votre dossier de ressources.

Je travaille sur un fork de Gradle du framework PixlUI qui utilise gradle et permet de spécifier textAllCaps ainsi que la police à partir des styles plutôt que de les exiger en ligne comme le fait le projet original.

Il semble qu’il y ait une autorisation sur les parameters du clavier mobile, la façon la plus simple de procéder est la suivante:

 editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()}); 

j’espère que ça va marcher