É realmente muito decepcionante que você não possa fazê-lo com styles ( <item name="android:textAllCaps">true</item>
) ou em cada arquivo de layout XML com o atributo textAllCaps , e a única maneira de fazê-lo é realmente usando theString.toUpperCase () em cada uma das strings quando você o faz. um textViewXXX.setText (theString).
No meu caso, eu não queria ter theString.toUpperCase () em qualquer lugar do meu código, mas ter um local centralizado para isso, porque eu tinha algumas atividades e lista layouts de itens com TextViews que deveriam estar em maiúsculas o tempo todo (um title) e outros que não o fizeram ... então ... algumas pessoas podem pensar que é um exagero, mas eu criei minha própria classe CapitalizedTextView estendendo android.widget.TextView e substitui o método setText colocando o texto em maiúscula.
Pelo menos, se o design mudar ou precisar remover o texto em maiúsculas em versões futuras, só preciso mudar para o TextView normal nos arquivos de layout.
Agora, considere que eu fiz isso porque o Designer do aplicativo realmente queria esse texto (os títulos) no CAPS em todo o aplicativo, independentemente da capitalização de conteúdo original, e também tive outros TextViews normais em que a capitalização veio com o conteúdo real .
Esta é a 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);
}
}
E sempre que você precisar usá-lo, apenas declare-o com todo o pacote no layout XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Alguns argumentam que a maneira correta de estilizar o texto em um TextView é usar um SpannableString , mas acho que isso seria um exagero ainda maior, além de consumir mais recursos, porque você instanciará outra classe que o TextView.