textAllCaps를<item name="android:textAllCaps">true</item>
사용하여 스타일 ( ) 또는 각 XML 레이아웃 파일에서 이를 수행 할 수 없다는 것은 정말 실망입니다. 속성 있는 유일한 방법은 실제로 각 문자열 ()를 사용하는 것입니다. textViewXXX.setText (theString).
필자의 경우 코드의 모든 곳에서 String.toUpperCase ()를 사용하고 싶지 않았지만 일부 활동이 있고 TextViews를 사용하여 항목 레이아웃을 항상 대문자로 사용해야하기 때문에 중앙 집중식으로 배치하고 싶었습니다 (a title) 및 다른 사람은 ... 그래서 ... 어떤 사람들은 과잉이라고 생각할 수도 있지만 android.widget.TextView를 확장하는 내 자신의 CapitalizedTextView 클래스를 만들었습니다 . 텍스트를 대문자로 설정하는 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 이외의 다른 클래스를 인스턴스화하기 때문에 더 많은 리소스를 소비하지는 않을 것이라고 생각합니다.