Je voudrais pouvoir attribuer un attribut ou un style xml à un TextView
qui fera le texte qu'il contient dans TOUTES LES LETTRES MAJUSCULES.
Les attributs 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 pouvoir séparer le style du contenu. Je sais que je pourrais le faire par programme, mais encore une fois, je veux garder le style hors du contenu et du code.
android
textview
capitalization
cottonBallPaws
la source
la source
Réponses:
Je pensais que c'était une demande assez raisonnable, mais il semble que vous ne puissiez pas le faire en ce moment. Quel échec total. lol
Mettre à jour
Vous pouvez maintenant utiliser textAllCaps pour forcer toutes les majuscules.
la source
textAllCaps
application se bloque si vous l'avez spécifiéandroid:fontFamily
dansthemes.xml
.Qu'en est-il d' Android: textAllCaps ?
la source
En utilisant AppCompat
textAllCaps
dans les applications Android prenant en charge les anciennes API (moins de 14)Il existe un widget d'interface utilisateur fourni avec AppCompat nommé CompatTextView est une extension TextView personnalisée qui ajoute la prise en charge de textAllCaps
Pour les nouvelles API Android> 14, vous pouvez utiliser:
Un exemple simple:
Source: developer.android
Mettre à jour:
la source
CompatTextView
est utilisé dansScrollingTabCointainerView
ce qui est utilisé dansToolbarWidgetWrapper
, ce qui semble assez nouveau et tant que le nom conserve "v7" dans son nom, c'est une garantie suffisante pour moi que çaCompatTextView
va rester où il est.CompatTextView
été remplacé parAppCompatTextView
dans la dernière bibliothèque appcompat-v7. Vous aviez tout à fait raison.Il est vraiment très décevant que vous ne puissiez pas le faire avec des styles (
<item name="android:textAllCaps">true</item>
) ou sur chaque fichier de disposition XML avec l' attribut textAllCaps , et la seule façon de le faire consiste à utiliser theString.toUpperCase () sur chacune des chaînes lorsque vous le faites un textViewXXX.setText (theString).Dans mon cas, je ne voulais pas avoir theString.toUpperCase () partout dans mon code mais avoir un emplacement centralisé pour le faire parce que j'avais des activités et des listes d'éléments avec TextViews qui étaient censées être capitalisées tout le temps (un title) et d'autres qui ne l'ont pas ... alors ... certaines personnes peuvent penser que c'est une exagération, mais j'ai créé ma propre classe CapitalizedTextView étendant android.widget.TextView et j'ai remplacé 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 majuscule dans les versions futures, je dois simplement passer à TextView normal dans les fichiers de mise en page.
Maintenant, prenez en considération que j'ai fait cela parce que le concepteur de l'application voulait en fait ce texte (les titres) dans CAPS partout dans l'application, peu importe la capitalisation de contenu d'origine, et j'avais également d'autres TextViews normales où la capitalisation est venue avec le contenu réel .
Voici la classe:
Et chaque fois que vous en avez besoin, déclarez-le simplement avec tout le package dans la disposition XML:
Certains diront que la bonne façon de styliser du texte sur une TextView est d'utiliser une SpannableString , mais je pense que ce serait encore plus exagéré, sans parler de consommer plus de ressources, car vous instancierez une autre classe que TextView.
la source
J'ai trouvé une solution similaire à celle de RacZo dans le fait que j'ai également créé une sous-classe
TextView
qui gère la mise en majuscule du texte.La différence est qu'au lieu de remplacer l'une des
setText()
méthodes, j'ai utilisé une approche similaire à ce queTextView
fait réellement l'API 14+ (qui est à mon avis une solution plus propre).Si vous regardez dans la source , vous verrez l'implémentation de
setAllCaps()
:La
AllCapsTransformationMethod
classe n'est pas (actuellement) publique, mais la source est également disponible . J'ai un peu simplifié cette classe (supprimé lasetLengthChangesAllowed()
méthode), donc la solution complète est la suivante:la source
Il semble qu'il y ait une autorisation sur le réglage du clavier mobile, donc la façon la plus simple de le faire est:
j'espère que cela fonctionnera
la source
Le projet PixlUI vous permet d'utiliser textAllCaps dans n'importe quelle visualisation de texte ou sous-classe de visualisation de texte, y compris: Button, EditText AutoCompleteEditText Checkbox 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 / police personnalisée que vous mettez dans votre dossier d'actifs.
Je travaille sur un fork Gradle du framework PixlUI qui utilise gradle et permet de spécifier textAllCaps ainsi que la police de caractères des styles plutôt que de les exiger en ligne comme le fait le projet d'origine.
la source