Es ist wirklich sehr enttäuschend, dass Sie dies nicht mit styles ( <item name="android:textAllCaps">true</item>
) oder in jeder XML-Layoutdatei mit dem textAllCaps- Attribut tun können. Die einzige Möglichkeit, dies zu tun, besteht darin, theString.toUpperCase () für jede der Zeichenfolgen zu verwenden, wenn Sie dies tun ein textViewXXX.setText (theString).
In meinem Fall wollte ich theString.toUpperCase () nicht überall in meinem Code haben, sondern einen zentralen Ort dafür haben, da ich einige Aktivitäten hatte und Elementlayouts mit TextViews auflistete, die die ganze Zeit groß geschrieben werden sollten (a title) und andere, die dies nicht getan haben ... also ... einige Leute denken vielleicht, dass dies ein Overkill ist, aber ich habe meine eigene CapitalizedTextView-Klasse erstellt, die android.widget.TextView erweitert, und die setText-Methode überschrieben, die den Text im laufenden Betrieb großschreibt.
Zumindest wenn sich das Design ändert oder ich den großgeschriebenen Text in zukünftigen Versionen entfernen muss, muss ich nur in den Layoutdateien zu normaler Textansicht wechseln.
Bedenken Sie nun, dass ich dies getan habe, weil der Designer der App diesen Text (die Titel) tatsächlich in CAPS in der gesamten App haben wollte, unabhängig von der ursprünglichen Großschreibung des Inhalts, und ich hatte auch andere normale TextViews, bei denen die Großschreibung mit dem tatsächlichen Inhalt kam .
Das ist die Klasse:
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);
}
}
Und wann immer Sie es verwenden müssen, deklarieren Sie es einfach mit dem gesamten Paket im XML-Layout:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Einige werden argumentieren, dass die richtige Art, Text in einer TextView zu formatieren , die Verwendung eines SpannableString ist , aber ich denke, das wäre ein noch größerer Overkill, ganz zu schweigen von einem höheren Ressourcenverbrauch, da Sie eine andere Klasse als TextView instanziieren.