Что импортировать для getSpans, getSpanStart, getSpanEnd? - PullRequest
3 голосов
/ 23 сентября 2019

Я имею в виду эту документацию .Я получаю неразрешенные ошибки ссылок для getSpans, getSpanStart, getSpanEnd и it.Какой пакет я должен импортировать?Я уже импортировал это:

import android.os.Bundle
import android.text.*
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.style.ForegroundColorSpan
import android.text.style.StyleSpan
import android.text.style.URLSpan
import androidx.core.content.ContextCompat

Как еще один вопрос, вообще, как люди выясняют, что импортировать?Часто он жалуется на неразрешенную ссылку, подобную этой, и мне трудно найти нужные пакеты для импорта.

=============================================================================

фрагмент полного кода

import android.graphics.Typeface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.*
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.style.ForegroundColorSpan
import android.text.style.StyleSpan
import android.text.style.URLSpan
import android.view.View
import android.widget.Toast.LENGTH_SHORT
import androidx.core.content.ContextCompat
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.activity_login.*
import android.text.SpannableStringBuilder

class HtmlLink(val urlSpan: URLSpan, val spanStart: Int, val spanEnd: Int)

class LoginActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        val termsText = getText(R.string.terms)
        val spannableString = SpannableString(termsText)
        val annotations = termsText.getSpans(0, termsText.length, Annotation::class.java)

        val clickableSpan = object : ClickableSpan() {
            override fun onClick(widget: View) {
                Snackbar.make(window.decorView.rootView, "URL is clicked", LENGTH_SHORT).show()

            }
            override fun updateDrawState(ds: TextPaint?) {
                ds?.isUnderlineText = false
            }
        }

        annotations?.find { it.value == "terms_link" }?.let {
            spannableString.apply {
                setSpan(
                    clickableSpan,
                    termsText.getSpanStart(it),
                    termsText.getSpanEnd(it),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
                )
                setSpan(ForegroundColorSpan(
                    ContextCompat.getColor(this@LoginActivity, R.color.colorAccent)),
                    termsText.getSpanStart(it),
                    termsText.  getSpanEnd(it),
                    0
                )
            }
        }

        textView_terms.apply {
            text = spannableString
            movementMethod = LinkMovementMethod.getInstance()
        }

    }
}

1 Ответ

2 голосов
/ 23 сентября 2019

Вы можете использовать метод getSpans с объектом SpannableString.
Вы пытаетесь применить его к termsText, которыйявляется строкой.

Измените val annotations = termsText.getSpans... на:

    val spannableString = SpannableString(termsText)
    val annotations = spannableString.getSpans(0, termsText.length, Annotation::class.java)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...