【问题标题】:How to make clickable an url link with slash on an android Textview如何在 android Textview 上使用斜线制作可点击的 url 链接
【发布时间】:2019-11-06 08:40:51
【问题描述】:

我正在使用“setMovementMethod”在 TextView 上制作可点击的 url。最好看下面的代码:

1. String value = "By signing up, you agree to our <a href=\"https://app.mywebsite.com/terms\">My App Term</a> and confirm that you have read our <a href=\"https://app.mywebsite.com/privacypolicy\">Privacy Policy</a>";

2. TextView text = (TextView) findViewById(R.id.text);

3. text.setText(Html.fromHtml(value));

4. text.setMovementMethod(LinkMovementMethod.getInstance());

问题在于网址的“.com”后面的斜杠。如果我删除那个斜线并像https://app.mywebsite.com那样写网址,那么它可以完美地工作,但是当我写像https://app.mywebsite.com/terms这样的网址时,链接是不可点击的。我可以看到突出显示的链接,但是当单击链接时它不起作用

我该如何解决这个问题?非常感谢。

【问题讨论】:

    标签: android url textview clickable


    【解决方案1】:

    首先,

    String value = "By signing up, you agree to our <a href="https://app.mywebsite.com/terms">My App Term</a> and confirm that you have read our <a href="https://app.mywebsite.com/privacypolicy">Privacy Policy</a>";
    

    是非法的,因为 - 你不能使用双引号,即 " 在另一个双引号内。

    所以,正确的形式应该是:

    String value = "By signing up, you agree to our <a href='https://app.mywebsite.com/terms'>My App Term</a> and confirm that you have read our <a href='https://app.mywebsite.com/privacypolicy'>Privacy Policy</a>";
    

    当我进行此更改时,我可以单击链接,否则代码将无法编译。

    其次,检查Build版本并使用Html.fromHtml(string, int)的两个参数版本

    更多信息请关注here:

    【讨论】:

    • 对不起。我在原始代码中对每个双引号进行了转义(\),但在这里看不到它。我改变了我的代码,就像你说的那样(即使是单引号),但它还没有工作(如果我删除斜杠它工作) if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ textview.setText (Html.fromHtml(value, Build.VERSION.SDK_INT)); } else { textview.setText(Html.fromHtml(value)); }
    • 您在哪个版本的 android 中测试它?我在 Pie 和 10 中尝试过,似乎可行。
    • 嗨,Priyabrata。我正在 Android 7 和 Android 10 上进行测试。仅当我删除 url 上的斜杠时才有效。
    • 我感觉这个问题与其他事情有关。是否可以复制问题并将其放入 git 中?我无法重现该问题。
    • 我发现了错误@Priyabrata。我们已经在 Google Play 控制台上配置了应用程序的 url。当您单击带有我们域的 URL 时,应用程序将打开。当我们点击链接时,什么也没发生,因为我们已经在应用程序上。我发现创建新项目的错误。当我单击新应用程序上的 url 并打开我的原始应用程序而不是浏览器时,我想通了。这都是我的错。对不起大家。我将尝试这个库github.com/saket/Better-Link-Movement-Method 来捕获 url 并能够打开它。
    【解决方案2】:

    创建一个函数如下:

    fun applyHtmlToTextView(tv: TextView?, html: String) {
        if (tv == null)
            return
    
        tv.movementMethod = LinkMovementMethod.getInstance()
    
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            tv.text = Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)
        } else {
            tv.text = Html.fromHtml(html)
        }
    }
    

    将您的字符串添加到string.xml 文件中,如下所示:

    <string name="lb_your_string"><![CDATA[<a href="https://google.com”>Google.</a>]]></string>
    

    并通过添加代码来使用它:

    applyHtmlToTextView(tv, getString(R.string.lb_your_string))
    

    或者您可以将value 变量编辑为:

    String value = "By signing up, you agree to our <a href=https://app.mywebsite.com/terms>My App Term</a> and confirm that you have read our <a href=https://app.mywebsite.com/privacypolicy>Privacy Policy</a>"
    

    删除\"

    【讨论】:

    • 对不起,我从服务器获取文本(值字符串)。我无法使用 string.xml 文件。
    • @Alex:我更新了我的答案。您可以要求后端人员更改消息。希望对你有帮助
    • 感谢@John Le,但我试图从后端删除 \" 但它只适用于没有斜杠的 url。
    猜你喜欢
    • 2016-04-07
    • 2012-03-13
    • 2015-04-27
    • 1970-01-01
    • 2012-09-07
    • 2011-02-13
    • 1970-01-01
    相关资源
    最近更新 更多