Как выделить или выделить TextView программно в Android?
В настоящее время я создаю небольшое приложение для чтения. Существует текстовое представление для отображения текста. Мы можем добавить текст в закладки и сохранить в виде списка. Я хочу щелкнуть по списку и выделить его или выбрать индекс закладки в текстовом представлении. Я могу получить bookmark_index
, Есть ли способ, как textview.setSelect(Start,Length)
? или любая библиотека может это сделать? Поблагодарить
Пожалуйста, посмотрите изображение, чтобы понять мою идею.
4 ответа
Использовать Spannable
Spannable WordtoSpan = new SpannableString("partial colored text");
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, stopIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);
Это зависит от минимальной версии Android, которую вы хотите поддерживать.
На 3.0+ (API уровня 11 и выше) у вас есть атрибут textIsSelectable в TextView, который включает это поведение. Например:
<TextView
android:id="@+id/deviceIdTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:text="" />
Или вы можете реализовать эту функцию самостоятельно, используя пролеты, как показано ниже.
TextView myTV = (TextView)findViewById(R.id.textView1);
String textString = "StackOverFlow Rocks!!!";
Spannable spanText = Spannable.Factory.getInstance().newSpannable(textString);
spanText.setSpan(new BackgroundColorSpan(0xFFFFFF00), 14, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
myTV.setText(spanText);
Все вышеперечисленные решения не работали для меня. Затем я добавил
android:textIsSelectable="true"
в XML, но это не сработало.
Что заставляет его работать, так это добавить
textView.setTextIsSelectable(true)
в вашей деятельности или фрагменте или адаптере.
Возможно, это решение поможет вам подготовить как меню, так и выбор текста.
Я хотел, чтобы текст можно было выбрать (для копирования и вставки) или чтобы работали другие жесты.
- Задайте для textIsSelectable значение false либо в файле макета, либо программно.
- Установите onTouchListener в текстовом представлении с помощью жестов.
- Разрешите одному из жестов переключиться в режим textSelection. Смотри ниже.
Как программно установить textSelection?
- Установите для textIsSelectable, focusable, longPressable значение true
- Установите для onTouchListener значение null.
- Установите прослушиватель щелчков для возврата к обычным жестам / меню.
1) Установите GestureHandler:
// Create your Touch Listener
onTouchListener = new OnSwipeTouchListener(mCtx, this);
view.setOnTouchListener( onTouchListener);
2) Переключитесь на режим textselction:
// Create your popup with an menu option to switch to textselection modus:
PopupMenu popup = new PopupMenu(mCtx, view);
popup.inflate(R.menu.text_options_menu);
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case ...
case R.id.text_textisselectable:
view.setOnTouchListener(null);
((TextView)view).setTextIsSelectable( true);
((TextView)view).setFocusable( true);
((TextView)view).setLongClickable( true);
// Install a click listener to switch back to the previous Touch Listener
((TextView)view).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupx = new PopupMenu(mCtx, view);
popupx.inflate(R.menu.selecttext_back_menu);
popupx.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
((TextView)view).setTextIsSelectable( false);
((TextView)view).setFocusable( false);
((TextView)view).setLongClickable( false);
view.setOnTouchListener(onTouchListener);
return true;
}});
popupx.show();
}
});
break;