简体   繁体   中英

Android best way to display html text

I have string with html tags , links , image links so what is the best way to display this string? I know that people using Webview for that but maybe there is a way to do it in textview without putting too much work? Because with WebView comes different problems for example if you want to change text color you need to add extra style to that string. I'm interested in ways to make links clickable and displaying Images in the same textview.

Try using this :-

Html.fromHtml("your html code");

Example :-

txtvw.setText(Html.fromHtml("<p align=right> <b> "
        + "Hi!" + " <br/> <font size=6>"
        + " How are you "+"</font> <br/>"
        + "I am fine" + "  </b> </p>"));

Output :-

**Full Code With Image And Hyperlink** :-

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;

public class MainActivity extends Activity {

 String htmlString = "<img src='ic_launcher'><i>Welcome to<i> <b><a href='https://stackoverflow.com/'>Stack Overflow</a></b>";

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  TextView htmlTextView = new TextView(this);
  setContentView(htmlTextView);

  htmlTextView.setText(Html.fromHtml(htmlString, new Html.ImageGetter(){

   @Override
   public Drawable getDrawable(String source) {
    Drawable drawable;
    int dourceId = 
      getApplicationContext()
      .getResources()
      .getIdentifier(source, "drawable", getPackageName());

    drawable = 
      getApplicationContext()
      .getResources()
      .getDrawable(dourceId);

    drawable.setBounds(
      0, 
      0, 
      drawable.getIntrinsicWidth(),
      drawable.getIntrinsicHeight());

    return drawable;
   }

  }, null));

  htmlTextView.setMovementMethod(LinkMovementMethod.getInstance());

 }

}

To support all API use this function :-

@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        return Html.fromHtml(html, Html.FROM_HTML_MODE_LEGACY);
    }
    else {
        return Html.fromHtml(html);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM