Android에서 Html.fromHtml ()을 사용하여 텍스트 색상 강조?


84

사용자가 특정 키워드를 검색 할 수있는 검색 화면이 있고 해당 키워드가 강조 표시되어야하는 애플리케이션을 개발 중입니다. Html.fromHtml 메서드를 찾았습니다.

그러나 나는 그것이 그것을하는 적절한 방법인지 아닌지 알고 싶습니다.

이에 대한 귀하의 견해를 알려주십시오.



답변:


197

또는 Spannables를 수동으로 처리하는 것보다 훨씬 간단 합니다. 배경을 강조 표시하지 않고 텍스트 만 강조하기 때문입니다.

String styledText = "This is <font color='red'>simple</font>.";
textView.setText(Html.fromHtml(styledText), TextView.BufferType.SPANNABLE);

8
Html.fromHtml은 파싱을 포함하기 때문에 SpannableString보다 느립니다. 그러나 짧은 텍스트는 문제가되지 않습니다
마이클 K에게

link에 다른 해결책이있는 것 같습니다 . Legend의 답변을 참조하십시오.
Kenneth Evans

1
코멘트처럼 TextView.BufferType.SPANNABLE을 전달할 필요가 없었고 여전히 작동한다는 것을 알았습니다. 감사!
James

안드로이드 용 긴 텍스트를 정렬하는 HTML 편집기를 알고 계십니까? 예를 들어이 사이트 ( html.am/html-editors/html-text-editor.cfm ) 를 사용하려고 하지만 소스를보고 싶다면 <span style="color:#ff0000;">Android 가 색상을 변경하지 않도록 색상을 반환합니다 .
mehmet 2014-06-07

@mehmet 아마도 검색하고 바꾸기 만하면 <span> 태그를 "color"속성이있는 <font> 태그로 변경할 수 있습니다.
Christopher Orr

35

xml 리소스의 색상 값 사용 :

int labelColor = getResources().getColor(R.color.label_color);
String сolorString = String.format("%X", labelColor).substring(2); // !!strip alpha value!!

Html.fromHtml(String.format("<font color=\"#%s\">text</font>", сolorString), TextView.BufferType.SPANNABLE); 

잘하셨습니다. 앱 리소스의 색상을 사용할 수 있으면 유용합니다.
speedynomads

두 번째 줄을 강조하고 싶습니다. 여기서 색상 16 진수를 부분 문자열로 지정하면 알파 값이 색상 설정을 무효화합니다! 잊지 마세요!
marcolav

12

이것은 Spannable String을 사용하여 달성 할 수 있습니다. 다음을 가져와야합니다.

import android.text.SpannableString; 
import android.text.style.BackgroundColorSpan; 
import android.text.style.StyleSpan;

그런 다음 다음과 같이 텍스트의 배경을 변경할 수 있습니다.

TextView text = (TextView) findViewById(R.id.text_login);
text.setText("");
text.append("Add all your funky text in here");
Spannable sText = (Spannable) text.getText();
sText.setSpan(new BackgroundColorSpan(Color.RED), 1, 4, 0);

이것이 위치 1-4의 문자를 빨간색으로 강조 표시합니다. 도움이 되었기를 바랍니다!


5
 String name = modelOrderList.get(position).getName();   //get name from List
    String text = "<font color='#000000'>" + name + "</font>"; //set Black color of name
    /* check API version, according to version call method of Html class  */
    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
        Log.d(TAG, "onBindViewHolder: if");
        holder.textViewName.setText(context.getString(R.string._5687982) + " ");
        holder.textViewName.append(Html.fromHtml(text));
    } else {
        Log.d(TAG, "onBindViewHolder: else");
        holder.textViewName.setText("123456" + " ");   //set text 
        holder.textViewName.append(Html.fromHtml(text, Html.FROM_HTML_MODE_LEGACY));   //append text into textView
    }

color.xml에서 글꼴 색상을 얻는 방법은 무엇입니까?
Noor Hossain

4

대체 솔루션 : 대신 WebView 사용. HTML은 작업하기 쉽습니다.

WebView webview = new WebView(this);

String summary = "<html><body>Sorry, <span style=\"background: red;\">Madonna</span> gave no results</body></html>";

webview.loadData(summary, "text/html", "utf-8");

2

글꼴은 더 ​​이상 사용되지 않습니다. 대신 스팬을 사용하십시오. Html.fromHtml("<span style=color:red>"+content+"</span>")


1

텍스트의 일부에 밑줄과 색을 칠하려면

strings.xml에서

<string name="text_with_colored_underline">put the text here and &lt;u>&lt;font color="#your_hexa_color">the underlined colored part here&lt;font>&lt;u></string>

다음 활동에서

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_colored_underline)));

클릭 가능한 링크의 경우 :

<string name="text_with_link"><![CDATA[<p>text before link<a href=\"http://www.google.com\">title of link</a>.<p>]]></string>

그리고 당신의 활동에서 :

yourTextView.setText(Html.fromHtml(getString(R.string.text_with_link)));
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());

0
textview.setText(Html.fromHtml("<font color='rgb'>"+text contain+"</font>"));

html 편집기에서 만든 것과 정확히 일치하는 색상을 제공하고 textview를 설정하고 textview 값과 연결하면됩니다. Android는 스팬 색상을 지원하지 않으며 편집기에서 글꼴 색상으로 변경하면 모든 설정이 완료됩니다.


0

먼저 문자열을 HTML로 변환 한 다음 스패너 블로 변환하십시오. 다음 코드를 제안하십시오.

 Spannable spannable = new SpannableString(Html.fromHtml(labelText));
                    
spannable.setSpan(new ForegroundColorSpan(Color.parseColor(color)), spannable.toString().indexOf("•"), spannable.toString().lastIndexOf("•") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.