Android 显示 html 文本的最佳方式
Android best way to display html text
我有带 html tags
、links
、image links
的字符串,那么显示此字符串的最佳方式是什么?我知道人们为此使用 Webview
但也许有一种方法可以在 textview 中完成它而无需投入太多工作?因为 WebView
会带来不同的问题,例如,如果您想更改文本颜色,则需要为该字符串添加额外的样式。我对使链接可点击并在同一文本视图中显示图像的方法很感兴趣。
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://whosebug.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);
}
}
它只对我有用的方式是:
class HelpActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.help_activity)
val txtView: TextView = findViewById(R.id.help_textView)
val str = resources.getString(R.string.help_textview)
txtView.text = Html.fromHtml(str, Html.FROM_HTML_MODE_COMPACT)
}
}
并且字符串资源使用 CDATA 包装器:
]]>
我有带 html tags
、links
、image links
的字符串,那么显示此字符串的最佳方式是什么?我知道人们为此使用 Webview
但也许有一种方法可以在 textview 中完成它而无需投入太多工作?因为 WebView
会带来不同的问题,例如,如果您想更改文本颜色,则需要为该字符串添加额外的样式。我对使链接可点击并在同一文本视图中显示图像的方法很感兴趣。
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://whosebug.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);
}
}
它只对我有用的方式是:
class HelpActivity : AppCompatActivity() {
@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.help_activity)
val txtView: TextView = findViewById(R.id.help_textView)
val str = resources.getString(R.string.help_textview)
txtView.text = Html.fromHtml(str, Html.FROM_HTML_MODE_COMPACT)
}
}
并且字符串资源使用 CDATA 包装器:
]]>