AndroidでHtml.fromHtml()を使用してテキストの色を強調表示しますか?


84

ユーザーが特定のキーワードを検索できる検索画面があり、そのキーワードを強調表示するアプリケーションを開発しています。Html.fromHtmlメソッドを見つけました。

しかし、それが適切な方法であるかどうかを知りたいと思います。

これについてのあなたの見解を教えてください。


実用的な例を確認してください。javatechig.com/2013/04/07/how-to-display-html-in-android-view
Nilanchal

回答:


197

または、Spannablesを手動で処理するよりもはるかに簡単です。背景を強調表示する必要はなく、テキストだけを表示するためです。

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

8
Html.fromHtmlは解析を伴うため、SpannableStringよりも遅いことに注意してください。しかし、短いテキストのために、それは問題ではない
のMichałK

リンクに別の解決策があるようです。Legendによる回答を参照してください。
ケネスエバンス

1
コメントと同じように、TextView.BufferType.SPANNABLEを渡す必要はなく、それでも機能することがわかりました。ありがとう!
ジェームズ

Android用の長いテキストを表示するためのHTMLエディタを知っていますか。たとえば、このサイト(html.am/html-editors/html-text-editor.cfm)を使用しようとしていますが、ソースを表示したい場合は<span style="color:#ff0000;">、Androidが色を変更しないように色を返します。
mehmet 2014年

@mehmetおそらく、検索して置換するだけで、<span>タグを「color」属性を持つ<font>タグに変更できます。
クリストファーオア2014年

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 2013年

2行目を強調したいのですが、ここで色の16進数を部分文字列化します。アルファ値を指定すると、色の設定が無効になります。それを忘れないでください!
marcolav 2018年

12

これは、スパン可能な文字列を使用して実現できます。以下をインポートする必要があります

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からフォントの色を取得する方法は?
ヌールホサイン

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.