Làm nổi bật Màu văn bản bằng Html.fromHtml () trong Android?


84

Tôi đang phát triển một ứng dụng trong đó sẽ có màn hình tìm kiếm nơi người dùng có thể tìm kiếm các từ khóa cụ thể và từ khóa đó sẽ được đánh dấu. Tôi đã tìm thấy phương pháp Html.fromHtml.

Nhưng tôi sẽ muốn biết liệu nó có đúng cách để làm điều đó hay không.

Hãy cho tôi biết quan điểm của bạn về điều này.



Câu trả lời:


197

Hoặc đơn giản hơn nhiều so với xử lý Spannablethủ công, vì bạn không nói rằng bạn muốn nền được đánh dấu, chỉ cần văn bản:

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

8
Cần lưu ý rằng Html.fromHtml chậm hơn SpannableString, vì nó liên quan đến phân tích cú pháp. Nhưng đối với một văn bản ngắn thì điều đó không quan trọng
Michał K

Có vẻ như có một giải pháp khác tại liên kết . Xem câu trả lời của Legend.
Kenneth Evans

1
Cũng giống như một nhận xét, tôi thấy mình không cần phải chuyển TextView.BufferType.SPANNABLE và nó vẫn hoạt động. Cảm ơn!
James

bạn có biết bất kỳ trình soạn thảo html nào để sắp xếp văn bản dài cho Android. ví dụ: tôi đang cố gắng sử dụng trang web này ( html.am/html-editors/html-text-editor.cfm ) nhưng nếu tôi muốn xem nguồn, nó trả về màu <span style="color:#ff0000;">để android không thay đổi màu.
mehmet

@mehmet Có lẽ bạn chỉ cần tìm kiếm và thay thế để thay đổi thẻ <span> thành thẻ <font> có thuộc tính "color".
Christopher Orr

35

Sử dụng giá trị màu từ tài nguyên 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); 

hoàn thành tốt. hữu ích để có thể sử dụng màu sắc từ tài nguyên ứng dụng của bạn.
speedynomads

Tôi muốn nhấn mạnh dòng thứ hai, trong đó bạn đặt giá trị màu hex: alpha sẽ làm cho cài đặt màu không hợp lệ! Đừng quên nó!
marcolav 20/03/18

12

Điều này có thể đạt được bằng cách sử dụng Chuỗi có thể kéo dài. Bạn sẽ cần nhập những thứ sau

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

Và sau đó bạn có thể thay đổi nền của văn bản bằng cách sử dụng như sau:

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);

Nơi này sẽ làm nổi bật các charecters ở vị trí 1 - 4 với màu đỏ. Hi vọng điêu nay co ich!


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
    }

làm thế nào để lấy màu chữ từ color.xml?
Noor Hossain

4

Giải pháp thay thế: Sử dụng WebView thay thế. Html rất dễ làm việc.

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

phông chữ không được dùng nữa, thay vào đó sử dụng span Html.fromHtml("<span style=color:red>"+content+"</span>")


1

Để làm cho một phần văn bản của bạn được gạch chân và tô màu

trong string.xml của bạn

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

sau đó trong hoạt động

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

và cho các liên kết có thể nhấp:

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

và trong hoạt động của bạn:

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>"));

Nó sẽ cung cấp màu sắc chính xác như những gì bạn đã tạo trong trình soạn thảo html, chỉ cần đặt textview và nối nó với giá trị textview. Android không hỗ trợ span color, hãy thay đổi nó thành màu phông chữ trong trình chỉnh sửa và bạn đã sẵn sàng.


0

Đầu tiên Chuyển đổi chuỗi của bạn thành HTML sau đó chuyển đổi nó thành có thể mở rộng. làm như gợi ý các mã sau.

 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);
            
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.