Это действительно очень разочаровывает, что вы не можете сделать это с помощью styles ( <item name="android:textAllCaps">true</item>
) или для каждого XML-файла макета с атрибутом textAllCaps , и единственный способ сделать это - на самом деле использовать theString.toUpperCase () для каждой из строк, когда вы делаете textViewXXX.setText (theString).
В моем случае я не хотел, чтобы везде в моем коде был метод theString.toUpperCase (), но имелось централизованное место для этого, потому что у меня были некоторые действия и списки макетов элементов с TextViews, которые должны быть написаны с заглавной буквы все время (a title) и другие, которые этого не сделали ... так что ... некоторые люди могут подумать, что это излишнее, но я создал свой собственный класс CapitalizedTextView, расширяющий android.widget.TextView, и переопределил метод setText, пишущий заглавные буквы на лету.
По крайней мере, если дизайн изменится или мне нужно удалить заглавные буквы в будущих версиях, мне просто нужно перейти на обычный TextView в файлах макета.
Теперь, примите во внимание, что я сделал это, потому что Дизайнер приложения действительно хотел, чтобы этот текст (заголовки) был в CAPS по всему приложению независимо от капитализации исходного содержимого, а также у меня были другие обычные TextView, где капитализация шла с фактическим содержимым. ,
Это класс:
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.