Подтвердить что ты не робот

Android: Как сделать TextView доступным для редактирования?

Как разрешить пользователю редактировать TextView? Конечно, я могу использовать EditText вместо этого, но я не знаю, как его настроить, а также я прочитал в документации на Android, что TextView может быть доступен для редактирования. Поэтому я попробовал это:

<TextView android:id="@+id/tv"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textSize="80sp"
          android:text="MyText"
          android:editable="true"
          android:singleLine="true"
          android:inputType="text"
          android:focusable="true"
          android:clickable="true"
          android:cursorVisible="true"/>

Но он по-прежнему выглядит как обычный TextView. Кто-нибудь знает, что я пропустил? Или, может быть, как настроить EditText для него выглядит как TextView: без границ и фона?

4b9b3361

Ответ 1

Я знаю, что вы не хотите использовать EditText, но очень легко сделать его похожим на TextView.

<EditText
     android:id="@+id/Id"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="@android:color/transparent" >
 </EditText>

Вы также можете использовать android:background="@null".

Изменить:

Параметр TextView editable делает его редактируемым (с некоторыми ограничениями).

Если вы установили android:editable="true", вы можете получить доступ к TextView через D-pad, или вы можете добавить android:focusableInTouchMode="true", чтобы иметь возможность фокусироваться на касании.

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

Ответ 2

Вы можете подделать редактируемый Textview. Вам просто нужно скрыть текстовое изображение, когда вы касаетесь его (сделайте его "кликабельным" ), замените его на EditText и снова отобразите его после завершения редактирования.

Ответ 3

TextView определяет все возможности, найденные в EditText, но не имеет встроенной поддержки для них. Некоторые основные отличия в EditText:

a) Метод getDefaultEditable() возвращает true. Это только знак, который определяет этот подкласс как редактируемый.

b) Метод перемещения. Является объектом, который управляет поведением курсора (позиция, перемещение назад/вперед - это может измениться на некоторых языках и т.д.). В противоположность, TextView просто возвращает null, потому что он не является курсором.

c) Метод CharSequence getText(). TextView возвращает одну строку для этого. В EditText используется конкретная реализация последовательности char (редактируемая), которая представляет изменяемый текстовый буфер.

Из-за этого мы не можем думать о TextView как сдержанный EditText. TextView набросает интерфейс редактирования, но не реализует сам.

Если вам нужен текстовый компонент, который вы иногда можете отключить, вы ищете компонент EditText.

Ответ 4

Вы можете сделать свой TextView доступным для редактирования, добавив эти строки

tv.setFocusable(true);
tv.setEnabled(true);
tv.setClickable(true);
tv.setFocusableInTouchMode(true);

Ответ 5

    tv.setCursorVisible(true);
    tv.setFocusableInTouchMode(true);
    tv.requestFocus();
    tv.setEnabled(true);