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:
package com.realactionsoft.android.widget;
import android.content.Context;
import android.util.AttributeSet;
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, AttributeSet attrs) {
super(context, attrs);
}
public CapitalizedTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setText(CharSequence text, BufferType type) {
super.setText(text.toString().toUpperCase(), type);
}
}
Et chaque fois que vous en avez besoin, déclarez-le simplement avec tout le package dans la disposition XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
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.