런타임에 TextView의 스타일을 변경하는 방법


98

사용자가을 탭 TextView하면 정의 된 스타일을 적용하고 싶은 Android 앱 이 있습니다.

A를 찾으려고 textview.setStyle()했지만 존재하지 않습니다. 나는 시도했다

textview.setTextAppearance();

하지만 작동하지 않습니다.


1
나는 이것이 불가능하다는 것을 어딘가에서 읽었습니다 ... stackoverflow.com/questions/2016249/… . 그러나 일부 속성은 별도로 설정할 수 있습니다.
Floern 2011 년

1
해보 셨나요 : textView.setTextTypeface? developer.android.com/reference/android/widget/…
Jonathan Roth 2011 년

21
@Falmarri TextView API 문서를 살펴 보셨습니까? 그렇다면 좀 더 건설적인 것을 말할 수있을 것입니다.
Fletch

답변:


143

res/values/style.xml다음과 같이 새 XML 파일 을 생성하여이를 수행했습니다 .

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

또한 다음과 같은 "strings.xml"파일에 항목이 있습니다.

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

그런 다음 내 코드에서 해당 TextView에서 탭 이벤트를 트랩하기 위해 ClickListener를 만들었습니다. 편집 : API 23에서 'setTextAppearance'는 더 이상 사용되지 않습니다.

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

다시 변경하려면 다음을 사용합니다.

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);

2
실제로 이것은 그림자 스타일에서는 작동하지 않습니다. 그림자를 변경하려면 다음과 같이해야합니다. lockText.setShadowLayer (20, 4, 4, 0xFFFF0000);
Lukas 2013

3
SDK 검사를 피하려면 TextViewCompat.setTextAppearance (myTextView, R.style.myStyle);
Justin Fiedler

90

Jonathan이 제안한 것처럼 textView.setTextTypeface작품을 사용하여 몇 초 전에 앱에서 사용했습니다.

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.

9
textView.setTypeface (null, Typeface.BOLD); 사용할 수 있습니다. textView..setTypeface (null, Typeface.ITALIC); textView.setTypeface (null, Typeface.BOLD_ITALIC);
peceps

2
textView.setTypeface (null, Typeface.BOLD)가 저에게 효과적이었습니다. 물론 1을 대신 사용할 수 있지만 상수를 수동으로 입력하는 것은 좋은 습관이 아닌 것 같습니다. 라이브러리에서 미리 정의 된 변수를 더 잘 사용합니다.
Pijusn

4
상수 대신의 int를 사용하는 사람들을 격려하지 마십시오
Chris.Jenkins

3
잘 했어! 내 실수는 첫 번째 매개 변수에서 이전 서체를 보내는 것입니다. 따라서 NORMAL-> BOLD를 변경하지만 BOLD-> NORMAL을 변경하면 작동합니다. 첫 번째 매개 변수가 null 일 수 있다는 것을 몰랐습니다! 이제 잘 작동합니다!
Felipe

12
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

당신은 코드에서 그것을 설정합니다. 서체


4

프로그래밍 방식 : 런타임

setTypeface ()를 사용하여 프로그래밍 방식으로 수행 할 수 있습니다.

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

XML : 디자인 타임

XML에서도 설정할 수 있습니다.

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

이것이 도움이되기를 바랍니다.

요약


2

나는 textView.setTypeface(Typeface.DEFAULT_BOLD);가장 간단한 방법이라는 것을 알았다 .


이것은 서체를 변경합니다. OP에 지정된 스타일이 아닙니다 .
HBG

사실, 이것은 게시물 당시에 가장 간단한 방법이었고 내가 유일한 방법을 기억하는 한-이었습니다. 그 동안 서체를 변경하지 않고 "스타일"을 굵게 변경할 수있는 새로운 API 메서드가 추가되었는지 확실하지 않습니다. 내가 틀렸다면 나를 고쳐주세요.
sfera

1

이 코드 줄을 시도하십시오.

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

여기서는이 textview에서 현재 Typeface를 가져 와서 새로운 Typeface를 사용하여 대체합니다. 여기에 새로운 서체가 DEFAULT_BOLD있지만 더 많이 적용 할 수 있습니다.


당신은 왜 당신의 코드가 그의 문제를 해결할 수 있는지 설명하고 싶습니다. 감사합니다.
Muhammed Refaat 2013 년

OP는 서체가 아닌 스타일을 변경하려고합니다 .
HBG


0

설정하려는 스타일에 따라 다른 방법을 사용해야합니다. TextAppearance 물건에는 자체 세터가 있고 TypeFace에는 자체 세터가 있으며 배경에는 자체 세터가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.