Bardzo rozczarowujące jest to, że nie można tego zrobić za pomocą styles ( <item name="android:textAllCaps">true</item>
) lub każdego pliku układu XML z atrybutem textAllCaps , a jedynym sposobem na to jest użycie metodyString.toUpperCase () na każdym z ciągów znaków, gdy to zrobisz textViewXXX.setText (theString).
W moim przypadku nie chciałem mieć plikuString.toUpperCase () wszędzie w moim kodzie, ale mieć scentralizowane miejsce, aby to zrobić, ponieważ miałem pewne działania i wyświetlałem układy elementów za pomocą TextViews, które zawsze powinny być pisane wielkimi literami (a tytuł) i inni, którzy nie ... więc ... niektórzy mogą myśleć, że to przesada, ale stworzyłem własną klasę CapitalizedTextView rozszerzającą android.widget.TextView i przesłoniłem metodę setText pisanie wielkimi literami na bieżąco.
Przynajmniej jeśli projekt się zmieni lub będę musiał usunąć tekst pisany wielkimi literami w przyszłych wersjach, po prostu muszę przejść do normalnego TextView w plikach układu.
Teraz weź pod uwagę, że to zrobiłem, ponieważ projektant aplikacji tak naprawdę chciał tego tekstu (tytułów) w CAPS w całej aplikacji bez względu na oryginalną wielkość liter, a także miałem inne normalne TextViews, w których wielkie litery pochodziły z rzeczywistej treści .
To jest klasa:
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);
}
}
I ilekroć musisz go użyć, po prostu zadeklaruj go z całym pakietem w układzie XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Niektórzy twierdzą, że poprawnym sposobem na stylizowanie tekstu w TextView jest użycie SpannableString , ale myślę, że byłaby to jeszcze większa nadwyżka, nie mówiąc już o większym zużyciu zasobów, ponieważ utworzysz instancję innej klasy niż TextView.