Как изменить виджет выбора текста на экране? - PullRequest
4 голосов
/ 09 августа 2011

Я заметил, что разные приложения Android имеют разные методы выделения текста. Если в браузере нажать и удерживать кнопку, текст будет крупным планом, а левый и правый края можно перетащить, чтобы изменить выделение. В приложении Gmail под курсором появляется большой синий круг, который облегчает перемещение.

Виджет выделения текста по умолчанию в поле EditText очень примитивен для сравнения. Как это можно изменить?

Обновление : я забыл упомянуть, что редактируемое значение является ложным. Когда значение editable равно true, текстовый селектор в порядке.

p.s. Какое собственное имя для экранного селектора текста?

Ответы [ 4 ]

4 голосов
/ 16 августа 2011

Начиная с Android 3.0 (уровень API 11), вы можете установить атрибут android:textIsSelectable для любого TextView, чтобы сделать его текст доступным для выбора. Пользовательский интерфейс по умолчанию на момент написания статьи похож на поведение, на которое вы ссылались в браузере.

РЕДАКТИРОВАТЬ : Кроме того, браузер Android по умолчанию использует свой собственный независимый от системы механизм выделения текста, который напоминает ручки выбора текста по умолчанию в Gingerbread. «Синий круг» звучит как настраиваемый интерфейс, добавленный производителем телефона.

1 голос
/ 17 августа 2011

Если это просто проблема невозможности выделить не редактируемый текст, вы можете использовать атрибут XML

android:textIsSelectable="true"

для этой EditText коробки.

с сайта Android :

android: textIsSelectable = "true" указывает, что можно выбрать содержимое нередактируемого текста.

Что касается вашего вопроса о терминологии, я бы назвал это курсор .

1 голос
/ 13 августа 2011

Вместо этого можно использовать WebView и включить выбор текста.

1 голос
/ 11 августа 2011

Я бы реализовал это как пользовательский класс, который расширяет EditText и реализует LongClickListener и ClickListener. Тогда вы можете получить полный контроль.

Это всего лишь псевдокод, указывающий в правильном направлении:

public class PrettySelectionEditText extends EditText implements OnLongClickListener, OnClickListener 
{
    private boolean isSelecting = false;

    public PrettySelectionEditText(Context context) 
    {
        super(context);
    }

    @Override
    public boolean onLongClick(View v) 
    {
        if (clickIsOnText)
        {
            isSelecting = true;
            //Highlight word and pretty controls
        }
        //Select here based on the text they've clicked on?

        //Return true if you want to consume the longClick
        return true;
    }

    @Override
    public void onClick(View v) 
    {
        //If in selection mode
        if (isSelecting)
        {
            //check where they've clicked
            if (clickIsInSelect)
            {
                updateSelection(click);
            }
            else
            {
                isSelecting = false;
            }
        }
    }
}
...