TextView를 스타일리시하여 모든 문자를 대문자로 만드는 방법이 있습니까?
xml 속성이나 스타일을 a에 할당할 수 있으면 좋겠습니다.TextView
그것은 모든 대문자로 된 텍스트를 만들 것입니다.
속성들은android:inputType="textCapCharacters"
그리고.android:capitalize="characters"
아무것도 하지 않고 사용자가 입력한 텍스트를 위한 것처럼 보입니다.TextView
.
내용에서 스타일을 분리할 수 있도록 이렇게 하고 싶습니다.제가 프로그램적으로 할 수 있다는 것을 알지만 다시 한번 콘텐츠와 코드에 스타일을 신경 쓰지 않기를 원합니다.
꽤 합리적인 요청이라고 생각했는데, 지금은 안 될 것 같네요.완전 실패작이네요
갱신하다
이제 텍스트AllCaps를 사용하여 모든 캡을 강제로 사용할 수 있습니다.
안드로이드:textAllCaps는 어떻습니까?
AppCompat을 사용하여 textAllCaps
이전 API(14개 미만)를 지원하는 Android Apps에서
AppCompat과 함께 제공되는 UI 위젯 중 하나가 있습니다. CompatTextView는 textAllCaps에 대한 지원을 추가하는 사용자 지정 TextView 확장입니다.
새로운 Android API > 14의 경우 다음을 사용할 수 있습니다.
android:textAllCaps="true"
간단한 예:
<android.support.v7.internal.widget.CompatTextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:textAllCaps="true"/>
업데이트:
그래서 최신 appcompat-v7 라이브러리에서 CompatTextView가 AppCompatTextView로 대체되었습니다 ~ Eugen Pechanec
스타일로 할 수 없다는게 정말 아쉽습니다 (<item name="android:textAllCaps">true</item>
) 또는 textAllCaps 특성을 가진 각 XML 레이아웃 파일에서 TextViewXXX.setText(theString)를 수행할 때 실제로 각 문자열에 String.toUpperCase()를 사용하는 방법밖에 없습니다.
제 경우에는 코드의 모든 곳에 String.toUpperCase()가 있는 것이 아니라 중앙 집중식으로 작업을 수행할 수 있는 공간을 만들고 싶었습니다. 그리고 항상 대문자로 표시되어야 하는 항목 레이아웃을 텍스트 보기로 나열하기 때문입니다(제목). 그리고 그렇지 않은 항목은...어떤 사람들은 오버킬이라고 생각할지 모르지만, 저는 저만의 캐피털라이즈드를 만들었습니다.Android를 확장하는 TextView 클래스입니다.위젯.TextView(텍스트 보기) 및 setText(텍스트) 메서드를 덮어씁니다.
적어도 디자인이 바뀌거나 앞으로 버전에서 대문자 텍스트를 제거해야 한다면 레이아웃 파일에서 일반 텍스트 보기로 변경하면 됩니다.
자, 제가 이렇게 한 이유는 앱의 디자이너가 원래 콘텐츠 자본화에 상관없이 실제로 앱 전체에 CAPS로 된 이 텍스트(제목)를 원했기 때문이며, 또한 실제 콘텐츠와 함께 자본화가 제공되는 다른 정상적인 텍스트 뷰를 원했기 때문입니다.
이 클래스는 다음과 같습니다.
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보다 다른 클래스를 인스턴스화하는 것은 물론 리소스 소모도 크기 때문에 더 큰 오버킬이 될 것이라고 생각합니다.
RacZo의 하위 도 생성했다는 RacZo의 하위 도 TextView
텍스트를 대문자로 만드는 것을 처리합니다.
은 은 를 하는 에 에 하는 중 하나를 하는 대신setText()
들,는을해다한와etohrsa,한들는와,dei'TextView
API 14+에서 실제로 실행됩니다(제 관점에서는 더 깨끗한 솔루션입니다).
소스를 조사하면 다음과 같은 기능을 구현할 수 있습니다.setAllCaps()
:
public void setAllCaps(boolean allCaps) {
if (allCaps) {
setTransformationMethod(new AllCapsTransformationMethod(getContext()));
} else {
setTransformationMethod(null);
}
}
AllCapsTransformationMethod
클래스가 (현재) 공개되지는 않지만 소스도 사용할 수 있습니다.그 수업을 조금 간소화했습니다. (제거했습니다.setLengthChangesAllowed()
methodd),서한은과다과다은한d서ss,.
public class UpperCaseTextView extends TextView {
public UpperCaseTextView(Context context) {
super(context);
setTransformationMethod(upperCaseTransformation);
}
public UpperCaseTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTransformationMethod(upperCaseTransformation);
}
public UpperCaseTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setTransformationMethod(upperCaseTransformation);
}
private final TransformationMethod upperCaseTransformation =
new TransformationMethod() {
private final Locale locale = getResources().getConfiguration().locale;
@Override
public CharSequence getTransformation(CharSequence source, View view) {
return source != null ? source.toString().toUpperCase(locale) : null;
}
@Override
public void onFocusChanged(View view, CharSequence sourceText,
boolean focused, int direction, Rect previouslyFocusedRect) {}
};
}
기본적으로 XML 파일의 TextView에 기록합니다.
android:textAllCaps="true"
모바일 키패드 설정에 대한 권한이 있는 것 같아 가장 쉬운 방법은 다음과 같습니다.
editText.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
이것이 효과가 있기를 바랍니다.
PixlUI 프로젝트를 사용하면 다음과 같은 텍스트 뷰 또는 텍스트 뷰의 하위 클래스에서 textAllCaps를 사용할 수 있습니다: 버튼, EditTextAutoCompleteEditText Checkbox RadioButton(텍스트 확인란 라디오 버튼) 및 기타 몇 가지.
Android 소스의 텍스트 뷰가 아닌 pixlui 버전을 사용하여 텍스트 뷰를 만들어야 합니다. 즉, 다음 작업을 수행해야 합니다.
<com.neopixl.pixlui.components.textview.TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
pixlui:textAllCaps="true" />
PixlUI를 사용하면 자산 폴더에 넣을 사용자 정의 서체/폰트를 설정할 수도 있습니다.
저는 픽슬UI 프레임워크의 그래들 포크를 작업하고 있는데, 그래들을 사용하고 원래 프로젝트처럼 인라인으로 입력해야 하는 것이 아니라 스타일에서 텍스트AllCaps와 서체를 지정할 수 있습니다.
언급URL : https://stackoverflow.com/questions/4434588/is-there-a-way-to-style-a-textview-to-uppercase-all-of-its-letters
'programing' 카테고리의 다른 글
npm에서 패키지를 찾을 수 없습니다.json (0) | 2023.09.09 |
---|---|
Set-Execution Policy가 금지된 경우에도 PowerShell 스크립트를 실행하려면 어떻게 해야 합니까? (0) | 2023.09.09 |
jQuery로 페이지 스크롤을 프로그래밍 방식으로 비활성화하는 방법 (0) | 2023.09.09 |
MySQL 온라인 테스트 도구 (0) | 2023.09.09 |
MariaDB의 CANCAT 키가 10.0에서 작동하지만 이후 버전은 작동하지 않는 테이블 (0) | 2023.09.09 |