1

我有一个文本,其中有两个可点击的跨度文本和这些链接在正常模式下工作的点击操作。但在可访问性模式下,textview 获得焦点,可点击跨度文本上的点击操作不起作用。

下面给出了使用的文本,两个可点击的跨度文本是“隐私”和“条件”

<string name="hello_first_fragment">Hello first fragment Privacy and Conditions and other things</string> 

使用的布局

     <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FirstFragment">


    <TextView
        android:id="@+id/textview_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:text="@string/hello_first_fragment"
        app:layout_constraintBottom_toTopOf="@id/button_first"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <Button
        android:id="@+id/button_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/next"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textview_first" />
</androidx.constraintlayout.widget.ConstraintLayout>

在 Fragment 内部

val spannableString = SpannableString(getString(hello_first_fragment))

   
val clickableSpan1 = object : ClickableSpan() {
        override fun updateDrawState(textPaint: TextPaint) {
            // use this to change the link color
            textPaint.color = textPaint.linkColor
            // toggle below value to enable/disable
            // the underline shown below the clickable text
            textPaint.isUnderlineText = true
        }

        override fun onClick(view: View) {
            Toast.makeText(this@FirstFragment.activity, "Clicked Privacy", Toast.LENGTH_SHORT).show()
        }
    }
    spannableString.setSpan(
        clickableSpan1, 21, 28,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
    )

    val clickableSpan2 = object : ClickableSpan() {
        override fun updateDrawState(textPaint: TextPaint) {
            // use this to change the link color
            textPaint.color = textPaint.linkColor
            // toggle below value to enable/disable
            // the underline shown below the clickable text
            textPaint.isUnderlineText = true
        }

        override fun onClick(view: View) {
            Toast.makeText(this@FirstFragment.activity, "Clicked Conditions", Toast.LENGTH_SHORT).show()
        }
    }
    spannableString.setSpan(
        clickableSpan2, 33, 43,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
    )

    binding.textviewFirst.movementMethod =
        LinkMovementMethod.getInstance() // without LinkMovementMethod, link can not click
    binding.textviewFirst.setText(spannableString, TextView.BufferType.SPANNABLE)
4

0 回答 0