Как разрешить пользователю выбирать текстовый диапазон в 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
Особенности цели:
- Простота в использовании - только один класс
- Поддержка текста и Html.fromHtml
- Может быть в ScrollView с правильными прикосновениями
- Курсоры могут быть переопределены
- Цвет выделения можно переопределить
На самом деле, вам не нужно разрабатывать эту функцию самостоятельно. Вам просто нужно использовать EditText вместо TextView, в то время как вы устанавливаете для android:editable of EditText значение false. Моя идея такая же, как у Сэнди.
Мой код здесь, надеюсь, он может вам помочь:
/questions/5773952/skopirujte-tekst-iz-textview-na-android/5773970#5773970
Все вышеперечисленные решения либо слишком длинные, либо не работают для меня.
Что вам нужно, это добавить просто
textView.setTextIsSelectable(true)
в твоей
activity
или же
fragment
или же
adapter
.