TextAllCaps özniteliğine sahip stillerle ( <item name="android:textAllCaps">true</item>
) veya her XML mizanpaj dosyasında yapamamanız gerçekten çok hayal kırıklığı yaratıyor ve bunu yapmanın tek yolu, aslında her dizede String.toUpperCase () kullanmaktır. bir textViewXXX.setText (dizgi).
Benim durumumda, kodumun her yerinde theString.toUpperCase () olmasını istemiyordum, ancak bunu yapmak için merkezi bir yere sahip olmak istemiyordum çünkü bazı Faaliyetlerim vardı ve TextViews ile her zaman büyük harf kullanılması gereken öğeler düzenlerini listeliyordu (a başlık) ve diğer değil ... yani ... bazı insanlar bir overkill olduğunu düşünebilir, ancak android.widget.TextView genişleten kendi CapitalizedTextView sınıfımı oluşturdum ve anında metnin büyük harfini kullanan setText yöntemini geçersiz kıldım.
En azından, tasarım değişirse veya büyük harfli metni gelecekteki sürümlerde kaldırmam gerekirse, yalnızca düzen dosyalarındaki normal TextView'e geçmem gerekir.
Şimdi, bunu yaptığımı göz önünde bulundurun çünkü Uygulama Tasarımcısı aslında bu metni (başlıkları) orijinal içerik büyük harf kullanımı ne olursa olsun tüm CAPS'de istiyordu ve ayrıca büyük harflerin gerçek içerikle geldiği diğer normal TextView'lerim vardı .
Bu sınıf:
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);
}
}
Ve ne zaman kullanmanız gerekiyorsa, XML düzenindeki tüm paketlerle beyan edin:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Bazı bir TextView metin stil için doğru yolu bir SpannableString kullanmak olduğunu iddia edecektir, ama daha büyük bir overkill olacağını düşünüyorum, TextView daha başka bir sınıf somutlaştırmak çünkü daha fazla kaynak tüketen söz değil.