Es realmente muy decepcionante que no pueda hacerlo con estilos ( <item name="android:textAllCaps">true</item>
) o en cada archivo de diseño XML con el atributo textAllCaps , y la única forma de hacerlo es usar theString.toUpperCase () en cada una de las cadenas cuando lo hace un textViewXXX.setText (theString).
En mi caso, no quería tener theString.toUpperCase () en todas partes de mi código, sino tener un lugar centralizado para hacerlo porque tenía algunas Actividades y diseños de elementos de lista con TextViews que se suponía que se capitalizaban todo el tiempo (un título) y otros que no lo hicieron ... entonces ... algunas personas pueden pensar que es una exageración, pero creé mi propia clase CapitalizedTextView extendiendo android.widget.TextView y anulé el método setText capitalizando el texto sobre la marcha.
Al menos, si el diseño cambia o si necesito eliminar el texto en mayúscula en futuras versiones, solo necesito cambiar a TextView normal en los archivos de diseño.
Ahora, tenga en cuenta que hice esto porque el Diseñador de la aplicación realmente quería este texto (los títulos) en MAYÚSCULAS en toda la aplicación sin importar la capitalización de contenido original, y también tenía otras TextViews normales donde la capitalización vino con el contenido real .
Esta es la clase:
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);
}
}
Y siempre que necesite usarlo, simplemente declare con todo el paquete en el diseño XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Algunos argumentarán que la forma correcta de diseñar el texto en un TextView es usar una SpannableString , pero creo que sería una exageración aún mayor, sin mencionar que consumirá más recursos porque creará una instancia de otra clase que TextView.