Как выделить или выделить 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;
Другие вопросы по тегам