Android'de Html.fromHtml () kullanarak Metin Rengini mi vurguluyorsunuz?


84

Kullanıcının belirli anahtar kelimeleri arayabileceği ve bu anahtar kelimenin vurgulanması gereken bir arama ekranının olacağı bir uygulama geliştiriyorum. Html.fromHtml yöntemini buldum.

Ama bunu yapmanın doğru yolu olup olmadığını bilmek isterim.

Lütfen bu konudaki görüşlerinizi bana bildirin.



Yanıtlar:


198

Ya Spannableda arka planın vurgulanmasını istediğinizi söylemediğiniz için, yalnızca metinle uğraşmaktan çok daha basit :

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

8
Html.fromHtml'nin SpannableString'den daha yavaştır, çünkü ayrıştırmayı içerir. Ancak kısa bir metin için önemli değil
Michał K

Bağlantıda başka bir çözüm var gibi görünüyor . Efsaneye göre cevabı görün.
Kenneth Evans

1
Bir yorum olarak, TextView.BufferType.SPANNABLE'ı geçmem gerekmediğini ve hala işe yaradığını fark ettim. Teşekkürler!
James

android için uzun metin oluşturmak için herhangi bir html editörü biliyor musunuz? örneğin bu siteyi ( html.am/html-editors/html-text-editor.cfm ) kullanmaya çalışıyorum ancak kaynağı görmek istersem renk döndürür, <span style="color:#ff0000;">böylece android rengi değiştirmez.
mehmet

@mehmet <span> etiketlerini "renk" özelliğine sahip <font> etiketleri olarak değiştirmek için arama yapabilir ve değiştirebilirsiniz.
Christopher Orr

36

Xml kaynağından renk değerini kullanma:

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

güzel yapılmış. uygulama kaynaklarınızdaki renkleri kullanabilmek için kullanışlıdır.
speedynomads

İkinci satırı vurgulamak istiyorum, burada onaltılık renk: alfa değeri renk ayarını geçersiz kılar! Unutma!
marcolav

12

Bu, Spannable String kullanılarak elde edilebilir. Aşağıdakileri içe aktarmanız gerekecek

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

Ve sonra aşağıdaki gibi bir şey kullanarak metnin arka planını değiştirebilirsiniz:

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

Bu, poz 1-4'teki karakterleri kırmızı renkle vurgulayacaktır. Bu yardımcı olur umarım!


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
    }

1
yazı tipi rengi color.xml'den nasıl alınır?
Noor Hossain

4

Alternatif çözüm: Bunun yerine bir Web Görünümü kullanma. Html ile çalışmak kolaydır.

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

yazı tipi kullanımdan kaldırıldı bunun yerine kullanım aralığı Html.fromHtml("<span style=color:red>"+content+"</span>")


1

Metninizin bir bölümünü altı çizili ve renkli hale getirmek için

strings.xml dosyanızda

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

sonra aktivitede

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

ve tıklanabilir bağlantılar için:

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

ve faaliyetinizde:

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

Tam olarak html düzenleyicide yaptığınız rengi verecektir, sadece textview'u ayarlayın ve textview değeri ile birleştirin. Android, yayılma rengini desteklemez, düzenleyicide yazı tipi rengine değiştirin ve hepiniz gitmeye hazırsınız.


0

Önce dizenizi HTML'ye, ardından yayılabilir hale getirin. aşağıdaki kodları önerdiğiniz gibi yapın.

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

0

Aşağıdakilerle Kotlin sürümünü de eklemek:

  • kaynaklardan metin alma ( strings.xml)
  • kaynaklardan renk alma ( colors.xml)
  • "HEX getiriliyor" uzantı olarak taşındı
fun getMulticolorSpanned(): Spanned {
    // Get text from resources
    val text: String = getString(R.string.your_text_from_resources)

    // Get color from resources and parse it to HEX (RGB) value
    val warningHexColor = getHexFromColors(R.color.your_error_color)

    // Use above string & color in HTML
    val html = "<string>$text<span style=\"color:#$warningHexColor;\">*</span></string>"

    // Parse HTML (base on API version)
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY)
    } else {
        Html.fromHtml(html)
    }
}

Ve Kotlin uzantısı (alfa kaldırılarak):

fun Context.getHexFromColors(
    colorRes: Int
): String {
    val labelColor: Int = ContextCompat.getColor(this, colorRes)
    return String.format("%X", labelColor).substring(2)
}

Demo

demo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.