Skip to main content

Highlighting Text Color using Html.fromHtml() in Android?



I am developing an application in which there will be a search screen where user can search for specific keywords and that keyword should be highlighted. I have found Html.fromHtml method.





But I will like to know whether its the proper way of doing it or not.





Please let me know your views on this.





Regards Sunil


Comments

  1. Or far simpler than dealing with Spannables manually, since you didn't say that you want the background highlighted, just the text:

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

    ReplyDelete
  2. This can be achieved using a Spannable String. You will need to import the following

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


    And then you can change the background of the text using something like the following:

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


    Where this will highlight the charecters at pos 1 - 4 with a red color. Hope this helps!

    ReplyDelete
  3. Alternative solution: Using a WebView instead. Html is easy to work with.

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

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...