Il est vraiment très décevant de constater que vous ne pouvez pas le faire avec des styles (<item name="android:textAllCaps">true</item>
) ou sur chaque XML fichier de mise en page avec le textAllCaps attribut, et la seule façon de le faire est en fait l'utilisation de theString.toUpperCase() sur chacune des chaînes lorsque vous faites un textViewXXX.setText(theString).
Dans mon cas, je n'ai pas voulu avoir theString.toUpperCase() partout dans mon code, mais d'avoir une centralisé endroit pour le faire parce que j'avais des Activités et des listes d'éléments de mise en page TextViews que où censé être capitalisés tout le temps (un titre) et d'autres qui n'ont pas... alors... certaines personnes peuvent penser est un exagéré, mais j'ai créé mon propre CapitalizedTextView classe étendant android.widget de.TextView et emportait la méthode setText capitaliser le texte à la volée.
Au moins, si les modifications de conception ou j'ai besoin de supprimer le texte majuscule dans les futures versions, j'ai juste besoin de changement à la normale TextView dans les fichiers de mise en page.
Maintenant, prenez en considération que j'ai fait cela parce que l'Application de créateurs voulaient réellement ce texte (titres) en MAJUSCULES partout dans l'Application, peu importe le contenu original de la capitalisation, et aussi, j'ai eu d'autres TextViews où la capitalisation est venu avec le contenu réel.
C'est 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 quand vous avez besoin de l'utiliser, il suffit de déclarer avec tout le paquet dans le fichier XML du layout:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Certains feront valoir que la façon correcte de style de texte sur un TextView est d'utiliser un SpannableString, mais je pense que ce serait encore plus exagéré, pour ne pas mentionner plus consommatrices de ressources parce que vous serez l'instanciation d'une autre classe que TextView.