如何在 Android Studio 的 TextView 段落中创建可点击的内联 link 并为其设置样式而不设置完整 TextView 的样式?

How can I create and style a clickable inline link in a TextView paragraph in Android Studio without styling the full TextView?

我想创建一个只有几个字可点击的 TextView。当用户单击该 link 时,将创建一个 Webview。

我也想改变 link 的颜色。

在 HTML 我可以这样做:

<p>By checking this box, I acknowledge that I have reviewed the <a href="To the other page"> Online Payment Terms & Conditions</a> and agree.</p>

如何在 Android studio 中创建它?

我目前拥有的:

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/terms_condition_message"
      app:layout_constraintTop_toTopOf="parent"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintEnd_toEndOf="parent" />
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <string name"terms_condition_message"><![CDATA[By checking this box, I acknowledge that I have reviewed the %1$s<color="#fff3670b4">Online Payment Terms & Conditions</color>%2$s and agree.

在文本视图中添加 android:linksClickable="true"android:textColorLink="@color/colorLink"

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/terms_condition_message"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintEnd_toEndOf="parent"
  android:linksClickable="true"
  android:textColorLink="@color/colorLink" />

movementMethod 设置为 Java 或 Kotlin class 中的 TextView。

在 Kotlin 中:

textView.movementMethod = LinkMovementMethod.getInstance()

在Java中:

textView.setMovementMethod(LinkMovementMethod.getInstance());

这是我的做法。

文本视图:

  <TextView
        android:id="@+id/forgot_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Forgot Password"
        android:textSize="20sp"
        app:layout_constraintBottom_toTopOf="@id/sign_up_prompt"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/sign_up_prompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/forgot_password" />

主要Activity:


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val forgotPasswordTextView = findViewById<TextView>(R.id.forgot_password)

        forgotPasswordTextView.setOnClickListener {
            val myIntent = Intent(this, ForgotPasswordActivity::class.java)
            startActivity(myIntent)

            forgotPasswordTextView.movementMethod = LinkMovementMethod.getInstance()
        }

        /*************************************************/

        val ss = SpannableString("By checking this box, I acknowledge that I have reviewed the Online Payment Terms & Conditions.")
        val clickableSpan: ClickableSpan = object : ClickableSpan() {
            override fun onClick(textView: View) {
                startActivity(Intent(this@MainActivity, SignUpActivity::class.java))
            }

            override fun updateDrawState(ds: TextPaint) {
                super.updateDrawState(ds)
                ds.setColor(Color.BLUE)
                ds.isUnderlineText = true
            }
        }

        ss.setSpan(clickableSpan, 61, 94, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

        val boldSpan = StyleSpan(Typeface.NORMAL)
        ss.setSpan(boldSpan, 61, 94, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)

        val textView = findViewById<TextView>(R.id.sign_up_prompt)
        textView.text = ss
        textView.movementMethod = LinkMovementMethod.getInstance()
        textView.highlightColor = Color.TRANSPARENT
    }
}

我曾经帮助过的博客: https://medium.com/@sairamravuri/clickable-textview-in-kotlin-a242f7168b89