スタイル ( ) を使用したり、 textAllCaps<item name="android:textAllCaps">true</item>
属性を持つ各 XML レイアウト ファイルでそれを行うことができないのは非常に残念です。それを 行う唯一の方法は、実際に各文字列で theString.toUpperCase() を使用することです。 textViewXXX.setText(theString)。
私の場合、コードのどこにでも theString.toUpperCase() を使用したくはありませんでしたが、それを行うための一元化された場所が必要でした。 title) とそうでない人...だから...やり過ぎだと思う人もいるかもしれませんが、android.widget.TextViewを拡張する独自の CapitalizedTextView クラスを作成し、その場でテキストを大文字にする setText メソッドをオーバーライドしました。
少なくとも、デザインが変更された場合、または将来のバージョンで大文字のテキストを削除する必要がある場合は、レイアウト ファイルで通常の TextView に変更するだけで済みます。
ここで、アプリのデザイナーが実際には、元のコンテンツの大文字化に関係なく、アプリ全体にこのテキスト (タイトル) を CAPS で表示することを望んでいたため、これを行ったことを考慮してください。 .
これはクラスです:
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);
}
}
そして、それを使用する必要があるときはいつでも、XML レイアウトのすべてのパッケージで宣言するだけです:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
TextView でテキストのスタイルを設定する正しい方法はSpannableStringを使用することだと主張する人もいますが、TextView とは別のクラスをインスタンス化することになるため、リソースを消費することは言うまでもなく、それはさらにやり過ぎだと思います。