TextView 안에 여러 스타일을 가질 수 있습니까?


547

TextView 내부의 다른 텍스트 조각에 여러 스타일을 설정할 수 있습니까?

예를 들어 텍스트를 다음과 같이 설정하고 있습니다.

tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);

각 텍스트 요소마다 다른 스타일을 가질 수 있습니까? 예를 들어, line1 굵게, word1 기울임 꼴 등

개발자 안내서의 일반적인 작업 및 Android에서의 작업 방법 에는 텍스트 선택, 강조 표시 또는 스타일링이 포함됩니다 .

// Get our EditText object.
EditText vw = (EditText)findViewById(R.id.text);

// Set the EditText's text.
vw.setText("Italic, highlighted, bold.");

// If this were just a TextView, we could do:
// vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);
// to force it to use Spannable storage so styles can be attached.
// Or we could specify that in the XML.

// Get the EditText's internal text storage
Spannable str = vw.getText();

// Create our span sections, and assign a format to each.
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

그러나 그것은 텍스트 안에 명시적인 위치 번호를 사용합니다. 더 깔끔한 방법이 있습니까?


6
TextView 문자열이 정적이면 html <b>, <i> 및 <u> 태그를 문자열 리소스 파일에 추가하면 자동으로 적용됩니다. 예 : <TextView android : text = "@ string / test"/> 여기서 @ string / test는 <string> <b> bold </ b>, <i> italic </ i> </ string>
greg7gkb

2
+1 @ greg7gkb! 핵심 단어는 '정적'입니다. 왜 내 문자열 중 일부가 <b>와 함께 작동하는지 궁금해하고 일부는 그렇지 않은 이유를 궁금해했습니다. 변수가 없었던 것.
Scott Biggs

답변:


694

누구 든지이 작업을 수행하는 방법을 궁금해하는 경우 한 가지 방법이 있습니다. (Mark 다시 감사합니다!)

mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" +  "<br />" + 
            "<small>" + description + "</small>" + "<br />" + 
            "<small>" + DateAdded + "</small>"));

이 메소드에서 지원하는 비공식 태그 목록은 이 링크 또는 다음 질문을 참조하십시오 . Android TextView가 지원하는 HTML 태그는 무엇입니까?


1
@ JānisGruzis : 아마도 이것을 수행하는 한 가지 방법은 formatTextWhite(string text)텍스트를 다음 형식 문자열에 삽입 하는 스텁 메소드를 사용하는 것 "<font size="..." color="..." face="...">%s</font>"입니다.
Legend

@Legend <font fgcolor = '# ffff5400'> <b> <big> "+"Title "+"</ big> </ b> </ font>을 사용했지만 fgcolor / color (모두 시도)가 아닙니다. 작업 ... html을 사용하여 색상 작업을 수행하는 방법을 알고 있습니까
Muhammad Babar

@ MuhammadBabar : 이것을 시도 할 수 있습니까 : Html.fromHtml("<![CDATA[<font color='#ffff5400'>the html content you already have</font>]]>");? 나는 이것이 언젠가 나를 위해 일한 것을 기억합니다. 여전히 작동하는지 확실하지 않습니다.
Legend

1
@ 레전드 감사하지만 주위에 방법 Html.fromHtml("<font color=\"#999999\">이 탈출 경로 나를 위해 일 했다 :) ...
무하마드 바바

2
이것이 왜 mBox..setText(Html.fromHtml("<b>" + name + "</b>") + doNotApplyHTML);아이디어로 작동하지 않는지
Shan Xeeshi

216

을 시도 Html.fromHtml()하고 굵고 기울임 꼴 HTML 태그로 텍스트를 마크 업하십시오. 예 :

Spanned text = Html.fromHtml("This mixes <b>bold</b> and <i>italic</i> stuff");
textView.setText(text);

1
실제로 그것은 또 다른 질문으로 연결됩니다 : html 클래스를 사용하지 않고 html 텍스트가있는 하나의 textview 또는 html 클래스를 사용하지 않고 다른 마크 업이 설정된 세 개의 텍스트보기를 갖는 것이 더 낫습니까? 나는 분명히 첫 번째 것을 가정하고 있지만 그냥 확인하고 싶었습니다 ...
Legend

2
Html.fromHtml ()이 지원하는 태그의 전체 목록이 무엇인지 잘 모르겠습니다. 소스 코드를 살펴 봐야합니다. 인라인 마크 업 및 여러 TextView 위젯은 직교 결정이어야합니다. 분리 된 텍스트 비트를 정확하게 배치해야하는 경우 여러 위젯을 사용하십시오. 위젯에 마크 업 인라인이 필요한 경우 인라인 마크 업을 사용하십시오. 기억하십시오 : Android에는 FlowLayout이 없으므로 여러 TextView를 함께 묶어 단락을 만드는 것은 실제로 AFAIK가 아닙니다.
CommonsWare

1
고마워요 ... 실제로 <small> 태그가 작동했습니다 ... 그래서 간단하게 유지하고 사용하겠습니다 ...
Legend

1
@TimBoland :를 통해 스팬을 버리고 있습니다 monthText + " " + month.getYearLabel(). 참조하십시오 StringUtils.concat().
CommonsWare

2
@TimBoland : monthYearLabel.setText(Html.fromHtml("<b>"+month.getMonthLabel().toUpperCase()+"</b>&nbsp;"+month.getYearLabel()))개별 조각이 필요하지 않은 경우 한 번에 모든 작업을 수행 할 수 있습니다.
CommonsWare

191

주제를 약간 벗어 났지만 여기서 언급하지 않은 것이 너무 유용하다는 것을 알았습니다.

string.xml 리소스 에서 Html 텍스트를 읽고 지역화하기 쉽게하려면 어떻게해야합니까? CDATA 는이를 가능하게합니다.

<string name="my_text">
  <![CDATA[
    <b>Autor:</b> Mr Nice Guy<br/>
    <b>Contact:</b> myemail@grail.com<br/>
    <i>Copyright © 2011-2012 Intergalactic Spacebar Confederation </i>
  ]]>
</string> 

Java 코드에서 다음과 같이 활용할 수 있습니다.

TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setText(Html.fromHtml(getString(R.string.my_text))); 

나는 이것이 효과가 있다고 기대하지 않았다. 그러나 그것은했다.

그것이 당신 중 일부에게 유용하기를 바랍니다!


2
일반적으로 "false"는 조회 테이블에서 이상한 값에 액세스했음을 의미합니다. R.id.ok와 R.string.ok를 가지고있을 때 이것을 얻었고 우연히 올바른 getString (R.string.ok) 대신 getString (R.id.ok)을 사용했습니다
Joe Plante

이것이 레이아웃 XML에서도 작동합니까? "@string/someText"여기서 "someText"는 strings.xml에 정의 된 리소스 인 문자열 리소스를 참조하면 모든 HTML 태그가있는 텍스트를 'text'로 가져옵니다.
Gee.E

3
나는 이것이 최선의 대답이라고 생각했다. 나를 감동시켰다. 도움이 될 수는 없지만 2 센트 가치의 답변도 넣을 수 있습니다. 해결책은 여기 gist.github.com/aegis1980/b138dcb2fd1b2e98aa30을 사용하면 레이아웃 파일에 할당 할 수 있으므로 프로그래밍 방식으로 텍스트 리소스를 할당 할 필요가 없습니다 (Android Studio에서 미리 볼 수 있습니다!)
Jon

127

html을 사용하고 싶지 않다면 styles.xml을 만들고 다음과 같이 사용할 수 있습니다.

TextView tv = (TextView) findViewById(R.id.textview);
SpannableString text = new SpannableString(myString);

text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

tv.setText(text, TextView.BufferType.SPANNABLE);

작업중 인 간단한 안드로이드 응용 프로그램에 복사하여 붙여 넣습니다. 단일 텍스트 뷰에서 두 가지 스타일이 적용됩니다.
켄트 안데르센

미안하지만 명확하지 않았습니다. 스타일을 적용 할 위치의 하위 문자열 (두 인덱스를 통해)을 지정해야하는 경우 인덱스는 물론 로케일마다 다르므로 현지화 된 문자열에는 작동하지 않습니다.
Jeffrey Blattman

당신이 올바른지. 여러 언어를 지원하는 경우 원하는 경로가 아닙니다. 문자열이 크기를 변경하지 않을 것이라고 확신하지 않는 한 (예 : 응용 프로그램 이름).
Kent Andersen

9
l10n이이 솔루션으로 작동하지 않는 이유를 모르겠습니다. 하나 대신 별도의 문자열을 얻으십시오. String firstPart = getString (R.string.line1); 문자열 secondPart = getString (R.string.line2); 확장 가능한 텍스트 = new SpannableString (firstPart + secondPart); text.setSpan (새 ForegroundColorSpan (Color.parseColor (TEXT_COLOR_FOR_FIRST_PART)), 0, firstPart.length (), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); myTextView.setText (텍스트, TextView.BufferType.SPANNABLE);
루이

5
l10n도 위치하기 때문에 @Rui. 문구에서 단어의 위치를 ​​하드 코딩 할 수 없으며 여전히 l10n입니다. 그래서 $1%s is a happy $2%s문자열 묶음 과 같은 것을 보게 됩니다. 토큰을 다시 정렬해야합니다.
Jeffrey Blattman

60

SpannableStringhtml 마크 업 대신 사용하는 것이 더 가볍습니다 . 시각적 예제를 보는 데 도움이되므로 여기에 보충 답변이 있습니다.

여기에 이미지 설명을 입력하십시오

이것은 단일 TextView입니다.

// set the text
SpannableString s1 = new SpannableString("bold\n");
SpannableString s2 = new SpannableString("italic\n");
SpannableString s3 = new SpannableString("foreground color\n");
SpannableString s4 = new SpannableString("background color\n");
SpannableString s5 = new SpannableString("underline\n");
SpannableString s6 = new SpannableString("strikethrough\n");
SpannableString s7 = new SpannableString("bigger\n");
SpannableString s8 = new SpannableString("smaller\n");
SpannableString s9 = new SpannableString("font\n");
SpannableString s10 = new SpannableString("URL span\n");
SpannableString s11 = new SpannableString("clickable span\n");
SpannableString s12 = new SpannableString("overlapping spans\n");

// set the style
int flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE;
s1.setSpan(new StyleSpan(Typeface.BOLD), 0, s1.length(), flag);
s2.setSpan(new StyleSpan(Typeface.ITALIC), 0, s2.length(), flag);
s3.setSpan(new ForegroundColorSpan(Color.RED), 0, s3.length(), flag);
s4.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, s4.length(), flag);
s5.setSpan(new UnderlineSpan(), 0, s5.length(), flag);
s6.setSpan(new StrikethroughSpan(), 0, s6.length(), flag);
s7.setSpan(new RelativeSizeSpan(2), 0, s7.length(), flag);
s8.setSpan(new RelativeSizeSpan(0.5f), 0, s8.length(), flag);
s9.setSpan(new TypefaceSpan("monospace"), 0, s9.length(), flag);
s10.setSpan(new URLSpan("https://developer.android.com"), 0, s10.length(), flag);
s11.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
        Toast.makeText(getApplicationContext(), "Span clicked", Toast.LENGTH_SHORT).show();
    }
}, 0, s11.length(), flag);
s12.setSpan(new ForegroundColorSpan(Color.RED), 0, 11, flag);
s12.setSpan(new BackgroundColorSpan(Color.YELLOW), 4, s12.length(), flag);
s12.setSpan(new UnderlineSpan(), 4, 11, flag);

// build the string
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append(s1);
builder.append(s2);
builder.append(s3);
builder.append(s4);
builder.append(s5);
builder.append(s6);
builder.append(s7);
builder.append(s8);
builder.append(s9);
builder.append(s10);
builder.append(s11);
builder.append(s12);

// set the text view with the styled text
textView.setText(builder);
// enables clicking on spans for clickable span and url span
textView.setMovementMethod(LinkMovementMethod.getInstance());

추가 연구

이 예제는 원래 여기 에서 영감을 받았습니다 .


5
귀하의 게시물이 SpannableString에 대한 Google 문서보다 낫습니다. 감사합니다
MBH

이것은 웹 서비스의 이미지를 지원 했습니까? 그런 요구 사항이 있습니다.
MohanRaj S

@MohanRajS SpannableStrings는 유니 코드 이모지를 지원하지만 다른 이미지는 지원하지 않습니다.
Suragch 2019

@Suragch는 신속한 응답에 감사하지만 내 요구 사항은 jpg, png입니다. 웹뷰 만 처리하도록 선택 했습니까? :(
MohanRaj S

43

지원되는 태그 목록은 다음과 같습니다.

문자열 리소스를 사용하는 경우 HTML 표기법을 사용하여 굵게 또는 기울임 꼴과 같은 간단한 스타일을 추가 할 수 있습니다. 현재 지원되는 태그는 다음과 같습니다 B(굵게), I(이탤릭체), U(밑줄), TT(고정 폭), BIG, SMALL, SUP(첨자), SUB(첨자) 및 STRIKE(취소). 예를 들어 res/values/strings.xml다음과 같이 선언 할 수 있습니다.

<resource>
    <string id="@+id/styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>

( http://developer.android.com/guide/faq/commontasks.html#selectingtext — 웹 아카이브 링크에서 <resource>오타는 독창적입니다!)

또한 Html.fromHtml간단한 경우에는 실제로 필요하지 않음을 보여줍니다 .


Html.fromHtml은 종종 텍스트 스타일을 지정하는 가장 쉬운 방법입니다. 또한이 링크는 이미 원래 질문에 있습니다.
Intrications

17

나는 같은 문제에 부딪쳤다. fromHtml을 사용할 수는 있지만 지금은 웹이 아니라 안드로이드입니다. 그래서 이것을 시도하기로 결정했습니다. 나는 이것을 현지화해야하므로 문자열 대체 개념을 사용하여 샷을주었습니다. TextView의 스타일을 기본 스타일로 설정 한 다음 다른 조각의 서식을 지정하십시오.

이것이 다른 사람들이 똑같은 일을하는 데 도움이되기를 바랍니다. 왜 이것이 프레임 워크에서 쉽지 않은지 모르겠습니다.

내 문자열은 다음과 같습니다


<string name="my_text">{0} You will need a {1} to complete this assembly</string>
<string name="text_sub0">1:</string>
<string name="text_sub1">screwdriver, hammer, and measuring tape</string>

스타일은 다음과 같습니다.


<style name="MainStyle">
    <item name="android:textSize">@dimen/regular_text</item>
    <item name="android:textColor">@color/regular_text</item>
</style>
<style name="style0">
    <item name="android:textSize">@dimen/paragraph_bullet</item>
    <item name="android:textColor">@color/standout_text</item>
    <item name="android:textStyle">bold</item>
</style>
<style name="style1">
    <item name="android:textColor">@color/standout_light_text</item>
    <item name="android:textStyle">italic</item>
</style>

내 formatStyles 메서드를 호출하는 코드는 다음과 같습니다.


SpannableString formattedSpan = formatStyles(getString(R.string.my_text), getString(R.string.text_sub0), R.style.style0, getString(R.string.main_text_sub1), R.style.style1);
textView.setText(formattedSpan, TextView.BufferType.SPANNABLE);

형식화 방법 :


private SpannableString formatStyles(String value, String sub0, int style0, String sub1, int style1)
{
    String tag0 = "{0}";
    int startLocation0 = value.indexOf(tag0);
    value = value.replace(tag0, sub0);

    String tag1 = "{1}";
    int startLocation1 = value.indexOf(tag1);
    if (sub1 != null && !sub1.equals(""))
    {
        value = value.replace(tag1, sub1);
    }

    SpannableString styledText = new SpannableString(value);
    styledText.setSpan(new TextAppearanceSpan(getActivity(), style0), startLocation0, startLocation0 + sub0.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    if (sub1 != null && !sub1.equals(""))
    {
        styledText.setSpan(new TextAppearanceSpan(getActivity(), style1), startLocation1, startLocation1 + sub1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    return styledText;
}

현지화 된 버전의 문자열이 {0} 및 {1}을 (를) 재정렬하면 이것이 작동하지 않을 것이라고 생각합니다. startLocation1는 <startLocation0 경우 당신은 startLocation0을 변경해야 할 수도 있습니다
JonathanC

14

이제 <b>요소가 더 이상 사용되지 않습니다. <strong>로 렌더링 <b>하고로 <em>렌더링합니다 <i>.

tv.setText(Html.fromHtml("<strong>bold</strong> and <em>italic</em> "));

이것은 나를 위해 잘 작동


8

HTMLBuilder를 사용하여 쉽게 할 수있는 방법은 다음과 같습니다.

    myTextView.setText(new HtmlBuilder().
                    open(HtmlBuilder.Type.BOLD).
                    append("Some bold text ").
                    close(HtmlBuilder.Type.BOLD).
                    open(HtmlBuilder.Type.ITALIC).
                    append("Some italic text").
                    close(HtmlBuilder.Type.ITALIC).
                    build()
    );

결과:

굵은 체 텍스트 굵은 체 텍스트


7

XML로 스타일이 지정된 텍스트를 추가하려면 TextView를 확장하여 setText ()를 재정의하는 사용자 정의보기를 만들 수 있습니다.

public class HTMLStyledTextView extends TextView
{
    public HTMLStyledTextView(Context context) {
        super(context);
    }

    public HTMLStyledTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public HTMLStyledTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setText(CharSequence text, BufferType type)
    {
       super.setText(Html.fromHtml(text.toString()), type);
    }
}

그런 다음 다음과 같이 사용할 수 있습니다 ( PACKAGE_NAME패키지 이름으로 대체 ).

<PACKAGE_NAME.HTMLStyledTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="<![CDATA[
        <b>Bolded Text:</b> Non-Bolded Text
    ]]>"
/>

그런 다음 Android Studio에서 미리보기합니까?
JPM


3

나도

Kotlin과 Anko에 아름다운 마크 업을 사용하는 것은 어떻습니까 ?

import org.jetbrains.anko.*
override fun onCreate(savedInstanceState: Bundle?) {
    title = "Created with Beautiful Markup"
    super.onCreate(savedInstanceState)

    verticalLayout {
        editText {
            hint = buildSpanned {
                append("Italic, ", Italic)
                append("highlighted", backgroundColor(0xFFFFFF00.toInt()))
                append(", Bold", Bold)
            }
        }
    }
}

아름다운 마크 업으로 생성


2

예,을 사용하여 가능합니다 SpannedString. Kotlin을 사용 하는 경우이를 수행하기위한 DSL (Domain-Specific-language)core-ktx제공 하므로을 사용하면 훨씬 쉽게 수행 할 수 있습니다.

    val string: SpannedString = buildSpannedString {
        bold {
            append("1111")
        }
        append("Devansh")     
    }

제공되는 추가 옵션은 다음과 같습니다.

append("Hello There")
bold {
    append("bold")
    italic {
        append("bold and italic")
        underline {
            append("then some text with underline")
        }
    }
}

마지막으로 다음을 수행 할 수 있습니다.

textView.text = string

0

실제로 Html 개체를 제외하고 Spannable 형식 클래스 (예 : TextAppearanceSpan 또는 TypefaceSpan 및 SpannableString togather)를 사용할 수도 있습니다. HTML 클래스도 이러한 메커니즘을 사용합니다. 그러나 Spannable 유형 클래스를 사용하면 더 많은 자유를 누릴 수 있습니다.


0

String의 length () 메소드를 활용하는 것만 큼 간단 할 수 있습니다.

  1. Strings XML 파일의 텍스트 문자열을 다른 스타일이 필요한만큼 많은 하위 문자열 (Android의 관점에서 별도의 문자열)로 분할하므로 str1, str2, str3 (경우와 같이), 함께 결합하면 사용하는 전체 단일 문자열입니다.

  2. 그런 다음 코드에서 제시 한 것처럼 "Span"방법을 따르십시오. 그러나 단일 문자열 대신 모든 하위 문자열을 병합하는 모든 하위 문자열을 각각 다른 사용자 정의 스타일을 가진 단일 문자열로 결합하십시오.

당신은 여전히 ​​숫자를 직접 사용하지는 않지만 여전히 코드에서와 같이 하드 코딩 된 형태를 취하지는 않지만 결합 된 length () 메소드로 대체됩니다 (앞에 두 개의 별이 있고 str을 접미사로 사용합니다). 변경을 없애기 위해 절대 숫자 대신 length ()) :

str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, **str.length()**, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

첫 번째 문자열 크기의 경우 str.length () + 1, 두 번째 문자열 크기의 경우 str.length () + str2.length () 등 모든 하위 문자열과 함께 0, 7 또는 8,19 대신 등등...


0

보조 스패너 블 클래스를 웹 페이지 하단의 Android String Resources 공유로 사용합니다. CharSquences그들에게 스타일 을 만들어서 접근 할 수 있습니다 .

그러나 그들이 우리에게주는 예는 대담하고 기울임 꼴이며 심지어 텍스트를 색칠하는 것입니다. 에 스타일 CharSequence을 설정하기 위해 여러 스타일을 래핑 해야했습니다 TextView. 그래서 그 클래스 (나는 그것을 명명했다 CharSequenceStyles)에 방금이 기능을 추가했습니다.

public static CharSequence applyGroup(LinkedList<CharSequence> content){
    SpannableStringBuilder text = new SpannableStringBuilder();
    for (CharSequence item : content) {
        text.append(item);
    }
    return text;
}

그리고보기에서 나는 이것을 추가했습니다.

            message.push(postMessageText);
            message.push(limitDebtAmount);
            message.push(pretMessageText);
            TextView.setText(CharSequenceStyles.applyGroup(message));

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


0

Spanny 를 사용하면 SpannableString을보다 쉽게 ​​사용할 수 있습니다.

Spanny spanny = new Spanny("Underline text", new UnderlineSpan())
                .append("\nRed text", new ForegroundColorSpan(Color.RED))
                .append("\nPlain text");
textView.setText(spanny)

0

Jon이 말했듯 이 나에게 이것은 최고의 솔루션이며 런타임에 텍스트를 설정할 필요가 없으며이 사용자 정의 클래스 HtmlTextView 만 사용하십시오.

public class HtmlTextView extends TextView {

  public HtmlTextView(Context context) {
      super(context);
  }

  public HtmlTextView(Context context, AttributeSet attrs) {
      super(context, attrs);
  }

  public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr) 
  {
      super(context, attrs, defStyleAttr);
  }

  @TargetApi(21)
  public HtmlTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
  }

  @Override
  public void setText(CharSequence s,BufferType b){
      super.setText(Html.fromHtml(s.toString()),b);
  }

}

그리고 이제는 XML에만 넣습니다.

<com.fitc.views.HtmlTextView
    android:id="@+id/html_TV"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/example_html" />

HTML 문자열로

<string name="example_html">
<![CDATA[
<b>Author:</b> Mr Donuthead<br/>
<b>Contact:</b> me@donut.com<br/>
<i>Donuts for life </i>
]]>

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