Điều thực sự rất đáng thất vọng là bạn không thể làm điều đó với các kiểu ( <item name="android:textAllCaps">true</item>
) hoặc trên mỗi tệp bố cục XML với thuộc tính textAllCaps và cách duy nhất để thực hiện là sử dụng theString.toUpperCase () trên mỗi chuỗi khi bạn thực hiện một textViewXXX.setText (theString).
Trong trường hợp của tôi, tôi không muốn cóString.toUpperCase () ở mọi nơi trong mã của mình nhưng phải có một nơi tập trung để làm điều đó bởi vì tôi có một số Hoạt động và liệt kê các bố cục các mục với TextViews được cho là được viết hoa mọi lúc (a tiêu đề) và những người khác không ... vì vậy ... một số người có thể nghĩ là quá mức cần thiết, nhưng tôi đã tạo lớp CapitalizedTextView của riêng mình mở rộng android.widget.TextView và vượt qua phương thức setText viết hoa văn bản một cách nhanh chóng.
Ít nhất, nếu thiết kế thay đổi hoặc tôi cần xóa văn bản viết hoa trong các phiên bản trong tương lai, tôi chỉ cần thay đổi thành TextView bình thường trong các tệp bố cục.
Bây giờ, hãy xem xét rằng tôi đã làm điều này bởi vì Nhà thiết kế ứng dụng thực sự muốn văn bản này (các tiêu đề) trong CAPS trên khắp Ứng dụng bất kể viết hoa nội dung ban đầu và tôi cũng có các TextView thông thường khác, nơi viết hoa đi kèm với nội dung thực tế .
Đây là lớp học:
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);
}
}
Và bất cứ khi nào bạn cần sử dụng nó, chỉ cần khai báo nó với tất cả các gói trong bố cục XML:
<com.realactionsoft.android.widget.CapitalizedTextView
android:id="@+id/text_view_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Một số người sẽ lập luận rằng cách chính xác để định kiểu văn bản trên TextView là sử dụng SpannableString , nhưng tôi nghĩ rằng nó thậm chí còn quá mức cần thiết, chưa kể đến việc tiêu tốn nhiều tài nguyên hơn vì bạn sẽ tạo ra một lớp khác so với TextView.