Как разрешить пользователю выбирать текстовый диапазон в TextView (аналогично EditText)

У меня есть TextView что я хотел бы позволить пользователю выбрать диапазон текста внутри него. TextView занимает всю ширину и высоту устройства (за исключением некоторых отступов и заголовка вверху). В EditText если вы продолжаете нажимать, вы получаете оверлей выделения, который позволяет вам устанавливать границы для левой и правой границ. Я хотел бы эту функциональность в TextView, Я читал, что в API уровня 9 (2.3) (http://developer.android.com/sdk/android-2.3.html) есть новые элементы управления выделением текста, но у меня возникают трудности при реализации этого. Я делаю это прямо сейчас:

eic = new InputConnection( bookTextView );
eic.beginBatchEdit();

Но это не делает ничего заметного. Кто-нибудь знает, как использовать InputConnection правильно? Благодарю.

Изменить: мне не обязательно использовать то, что я пытался выше. Я в конечном итоге хочу использовать либо TextView или EditText который выглядит и чувствует себя как TextView и быть в состоянии выбрать текст, используя перетаскивающий курсор. Затем я хотел бы манипулировать выделенным текстом с помощью различных параметров контекстного меню (или меню, которое появляется над выделенным текстом).

6 ответов

Решение

Вот идея.. Добавить EditText с фоном TextView, Вот пример

<EditText 
android:text=" This is not an editable EditText" 
android:id="@+id/EditText01" 
android:layout_width="wrap_content" 
android:textColor = "@android:color/white"
android:editable = "false"
android:cursorVisible="false"
android:layout_height="wrap_content"
android:background = "@android:drawable/dark_header">
</EditText>

добавьте это в ваш XML вместо TextView

Вы можете включить TextView Spannable хранилище. См. Пример выделения текста в TextView или WebView.

Смотрите также:

http://developer.android.com/reference/android/text/Spanned.html

Вы можете отобразить текст в WebView и включить выделение текста. Если вы хотите использовать только textview/edittext, вот ответ, который может вам помочь, а также информация о классе Spannable, который может помочь вам выполнить то, что вы хотите.

После долгого интернет-серфинга, чтобы найти решение, я предпочел создать свой собственный класс

https://github.com/orionsource/SelectableTextViewer

Особенности цели:

  1. Простота в использовании - только один класс
  2. Поддержка текста и Html.fromHtml
  3. Может быть в ScrollView с правильными прикосновениями
  4. Курсоры могут быть переопределены
  5. Цвет выделения можно переопределить

На самом деле, вам не нужно разрабатывать эту функцию самостоятельно. Вам просто нужно использовать EditText вместо TextView, в то время как вы устанавливаете для android:editable of EditText значение false. Моя идея такая же, как у Сэнди.

Мой код здесь, надеюсь, он может вам помочь:

/questions/5773952/skopirujte-tekst-iz-textview-na-android/5773970#5773970

Все вышеперечисленные решения либо слишком длинные, либо не работают для меня.

Что вам нужно, это добавить просто textView.setTextIsSelectable(true)в твоей activityили же fragmentили же adapter.

Другие вопросы по тегам