安卓 WebView 链接颜色

12
我正在使用WebView在我的应用程序中展示网站,并且我想知道是否可以更改链接的颜色和样式,因为默认情况下是蓝色并带有下划线?
我搜索了一下,但所有的问题和解决方案都是关于移除链接周围的高亮显示,没有关于链接本身的内容。我只想知道是否有像TextView的android:textColorLink这样简单的解决方案,还是我需要以某种方式修改网站正文?
谢谢!

1
可能是重复的问题:https://dev59.com/y2XWa4cB1Zd3GeqPNHZJ 或 https://dev59.com/anA75IYBdhLWcg3wSm-4 - Luis Mendo
第二个问题是关于高亮显示的事情,就像我在问题中所说的那样,我不关心链接周围的高亮显示。第一个问题是根据我的理解自己构建HTML,所以也不适用于我的情况。 - ecem
1
我认为你需要修改网站。你应该能够添加一些样式,比如 a{color: red;} 来将所有链接变成红色。如果你不想在页面上这样显示,你可以尝试在你的应用程序中提取HTML代码,在<head>标签中加入一些<style>标签,然后使用你的Webview进行渲染。 - FoamyGuy
我刚刚在尝试做这件事,创建了一个CSS文件,现在正试图为链接加载一些样式,但迄今为止没有成功 :) - ecem
哦,那个有效!我成功地使用自定义CSS文件加载了页面,这就是正确的方法。 - ecem
2个回答

20

好的,我成功地完成了它,并想要分享我的方法给未来的访问者。

首先我创建了一个带有所需样式的CSS文件,命名为style.css,保存在资产文件夹下。

a {color:purple; text-decoration:none}

然后,在代码中我按以下方式加载页面,其中content是页面的实际HTML内容。

String htmlBody = "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />" + content;
mWebView.loadDataWithBaseURL("file:///android_asset/", htmlBody, "text/html", "utf-8",
            null);

就是这样!希望能对某些人有所帮助。


4
谢谢ecem,我使用了你的解决方案,并通过在htmlBody中添加"<style>a{color:purple; text-decoration:none}</style>"来内联执行它。 - Fraser
3
别忘了在{color}前加上"a"。我一开始以为这是打印错误,但实际上是指颜色只应用于链接。 - nutella_eater
谢谢您的回答,我尝试使用这段代码,但它并没有帮助。您能给我其他的解决方案吗? - Pans

3

下面是如何添加HTML链接并自定义链接的示例:

WebSettings webViewSettings = webView.getSettings();
webViewSettings.setDefaultFontSize(AppSettings.defaultFontSize);
webView.setBackgroundColor(Color.TRANSPARENT);

webView.loadDataWithBaseURL("file:///android_asset",  Util.replaceLinkTags(myText), "text/html", "utf-8", null);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith("file")) {
            Intent intent = new Intent(MyActivity.this, MyActivity.class);
            intent.putExtra("word", Uri.parse(url).getLastPathSegment());
            startActivity(intent);
            return true;
        } else
            return false;
    }
});

public static String replaceLinkTags(String text) {
    text = "<html><head>"
            + "<style type=\"text/css\">body{color:" + "#424242" + ";} a{color:#00B8D4; text-decoration:none; font-weight:bold;}" 
            + "</style></head>"
            + "<body>" + text + "</body></html>";

    String str;
    while ((text.indexOf("\u0082") > 0)) {
        if ((text.indexOf("\u0082") > 0) && (text.indexOf("\u0083") > 0)) {
            str = text.substring(text.indexOf("\u0082") + 1, text.indexOf("\u0083"));
            text = text.replaceAll("\u0082" + str + "\u0083", "<a href=\"" + str + "\">" + str + "</a>");
        }
    }    
    return text;
}

感谢分享这个答案,解决方案对我很有效,非常感谢你提出这个问题 @ecem。 - MohanRaj S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接