Неожиданный разрыв строки при использовании spannable - PullRequest
0 голосов
/ 17 февраля 2020

Мое приложение - словарь арабский c. У меня есть следующий TextView

<TextView
        android:id="@+id/txtArInf"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:gravity="center"
        android:textColor="@color/primaryText"
        android:textIsSelectable="true"
        android:textSize="34sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="إِتْيَانٌ" />

и метод выделения результатов поиска:

private fun highlightArabicQuery(resources: Resources, spannable: Spannable, query: Pattern) {
    val matcher = query.matcher(spannable)
    val color = resources.getColor(R.color.background_match_highlight)
    while (matcher.find()) {
        spannable.setSpan(
                BackgroundColorSpan(color),
                matcher.start(),
                matcher.end(),
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
        )
    }
}

Я получаю неожиданные разрывы строк в некоторых словах, которые выглядят следующим образом.

Unexpected line break when using spannable Unexpected line break when using spannable 2

Шаблон регулярного выражения в приведенном выше примере равен ن[\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0670]*ص[\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0670]*ر[\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0670]* (символы Unicode в скобках обозначаются арабскими c диакритическими знаками)

...