首页 > 解决方案 > 如何打开 html 字符串“a href”到 Webview?

问题描述

如何打开a href仅在 webview 上的 html 字符串而不是在浏览器上?

我正在使用 LinkMovementMethod,这可以在其他应用程序(例如来自 youtube 的视频)上打开它,但我有一些链接需要仅在 webview 上打开。

这是一个示例 html 字符串

String html_text =  "<h1>sample text</h1><p><small>February 1 1970</small></p><p class=\"text-center\"><img src=\"https://www.google.com\" /></p><p>sample (<a href=\"https://google.com\">here</a>).</p>"

我需要 a href 仅在 webview 上打开。

这是我的代码

详细活动

public class DetailActivity extends AppCompatActivity implements Html.ImageGetter {

    private TextView newsContentTv;
    private WebView newsWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail_news);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        newsWebView = (WebView) findViewById(R.id.newsWebView);
        setSupportActionBar(toolbar);

        // add back arrow to toolbar
        if (getSupportActionBar() != null){
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }

        newsContentTv = (TextView) findViewById(R.id.textNewsContext);

        Intent i = getIntent();

        String news_content = i.getStringExtra("detail_content");

        Spanned spanned = Html.fromHtml(news_content, this, null);
        Spannable spannable = new SpannableString( Html.fromHtml(news_content) );
        newsContentTv.setText(spanned);

        newsContentTv.setMovementMethod(LinkMovementMethod.getInstance());

    }

任何帮助将非常感激。

标签: javaandroidwebview

解决方案


// Create an unencoded HTML string
// then convert the unencoded HTML string into bytes, encode
// it with Base64, and load the data.
String html_text =
 "<h1>sample text</h1><p><small>February 1 1970</small></p><p class=\"text-center\"><img src=\"https://www.google.com\" /></p><p>sample (<a href=\"https://google.com\">here</a>).</p>";
String encodedHtml = Base64.encodeToString(html_text.getBytes(),
    Base64.NO_PADDING);
newsWebView.loadData(encodedHtml, "text/html", "base64");

我希望这能帮到您。


推荐阅读