首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TextView中的Android Kotlin创建链接

TextView中的Android Kotlin创建链接
EN

Stack Overflow用户
提问于 2022-01-10 23:04:55
回答 2查看 439关注 0票数 0

在strings.xml中,我的关键字为

by_continuing_you_agree_terms_and_policy

By continuing, you agree our Terms of Service and <a href="https://www.google.com">Privacy Policy</a>

这是TextView:

代码语言:javascript
运行
复制
<TextView
    android:id="@+id/createAccountTermsText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:paddingTop="8dp"
    android:text="@string/by_continuing_you_agree_terms_and_policy"
    android:textColor="#A1A1A1" />

但当我敲击它的时候什么都不会发生。

基于我添加的其他问题的“解决方案”

代码语言:javascript
运行
复制
    android:autoLink="web"
    android:linksClickable="true"

不起太大作用所以我补充道:

代码语言:javascript
运行
复制
binding.createAccountTermsText.movementMethod = LinkMovementMethod.getInstance()

也不起作用!

这不是我第一次看到Android的愚蠢之处。在这段时间里,Android似乎是一个非常可怕的应用程序开发软件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-10 23:54:31

好吧,这是一个完整的解决方案:

代码语言:javascript
运行
复制
    val text = getString(R.string.by_continuing_you_agree_terms_and_policy)
    val ss = SpannableString(text)

    val clickTerms: ClickableSpan = object : ClickableSpan() {
        override fun onClick(widget: View) {
            Log.d(tagg, "terms clicked")
            binding.createAccountTermsText.clearFocus()
        }
    }

    val clickPrivacy: ClickableSpan = object : ClickableSpan() {
        override fun onClick(widget: View) {
            Log.d(tagg, "privacy clicked")
            binding.createAccountTermsText.clearFocus()
        }
    }
    
    val hintColorOne = ForegroundColorSpan(Color.parseColor("#FF0000"))
    val hintColorTwo = ForegroundColorSpan(Color.parseColor("#FF0000"))

    ss.setSpan(hintColorOne, 29, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
    ss.setSpan(hintColorTwo, 50, 64, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    ss.setSpan(clickTerms, 29, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
    ss.setSpan(clickPrivacy, 50, 64, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

    binding.createAccountTermsText.text = ss
    binding.createAccountTermsText.movementMethod = LinkMovementMethod.getInstance()

ints代表第一个/最后一个字符,这意味着颜色和单击区域在它们之间。

注意1:对两个跨跨使用hintColorOne和hintColorTwo而不是类似的hintColorOne是必要的,因为对这两个跨跨只使用一个将只使第二个跨工作。在所有这些惊喜中开发android应用程序,实在是一种简单的快乐!

注2:使用clickableSpan将禁用定义的颜色并使用XML定义的android:textColorLink="#FF0000"中的

票数 1
EN

Stack Overflow用户

发布于 2022-01-11 00:52:28

代码语言:javascript
运行
复制
    android:autoLink="web"

使类似于文本中的http://www.google.com的内容可点击。不是<a href="https://www.google.com">Privacy Policy</a>

如果要在代码中使用"a href“,则需要使用

代码语言:javascript
运行
复制
val html=getString(R.string.linked_string)
textview.movementMethod=LinkMovementMethod.getInstance()
textview.text=Html.fromHtml(html, Html.FROM_HTML_MODE_COMPACT)

在string.xml中,将<替换为&lt;

别忘了关掉android:autoLink="web"

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70659862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档