เป็นเรื่องที่น่าผิดหวังอย่างยิ่งที่คุณไม่สามารถทำได้ด้วยสไตล์ ( <item name="android:textAllCaps">true</item>
) หรือในแต่ละไฟล์เลย์เอาต์ XML ที่มี แอตทริบิวต์textAllCapsและวิธีเดียวที่จะทำได้คือการใช้จริงString.toUpperCase () ในแต่ละสตริงเมื่อคุณทำ textViewXXX.setText (theString)
ในกรณีของฉันฉันไม่ต้องการให้ theString.toUpperCase () ทุกที่ในรหัสของฉัน แต่จะมีสถานที่รวมศูนย์ที่จะทำเพราะฉันมีกิจกรรมบางอย่างและรายการรูปแบบรายการที่มี TextViews ที่ควรจะเป็นตัวพิมพ์ใหญ่ตลอดเวลา ( ชื่อเรื่อง) และอื่น ๆ ที่ไม่ได้ ... ดังนั้น ... บางคนอาจคิดว่าเป็น overkill แต่ฉันสร้างคลาส CapitalizedTextView ของฉันเองที่ขยายandroid.widget.TextViewและขยายวิธี setText ให้เป็นตัวพิมพ์ใหญ่
อย่างน้อยถ้าการออกแบบเปลี่ยนแปลงหรือฉันต้องการลบข้อความที่เป็นตัวพิมพ์ใหญ่ในเวอร์ชันอนาคตฉันแค่ต้องเปลี่ยนเป็น TextView ปกติในไฟล์เลย์เอาต์
ตอนนี้ให้พิจารณาด้วยว่าฉันทำสิ่งนี้เพราะผู้ออกแบบแอปต้องการข้อความนี้ (ชื่อเรื่อง) ใน CAPS ทั่วแอพไม่ว่าจะใช้ตัวพิมพ์ใหญ่ในเนื้อหาต้นฉบับและฉันก็มี TextViews ปกติอื่น ๆ ที่การใช้อักษรตัวพิมพ์ใหญ่มาพร้อมกับเนื้อหาจริง .
นี่คือคลาส:
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