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