Android Edit Text Cursor не появляется

В моем приложении я отключил клавиатуру (я использую теперь свою пользовательскую клавиатуру), используя этот код:

editText.setInputType(InputType.TYPE_NULL); 

Теперь моя проблема в том, что текстовый курсор больше не отображается в тексте редактирования. Что мне делать? Любое предложение было бы очень оценено.

Существует проблема, открытая в отслеживании ошибок. Проблема открыта для отслеживания ошибок . Один из пользователей предлагает подход, который работает на «большинстве» устройств.

Вкратце, все, что вам нужно сделать, это позвонить:

 editText.setRawInputType(InputType.TYPE_CLASS_TEXT); 

Для вашего вида EditText (после того, как вы вызвали editText.setInputType(InputType.TYPE_NULL); ).

Вероятно, вы также должны установить:

 editText.setTextIsSelectable(true); 

Чтобы текст мог быть выбран (хотя, похоже, он не работает должным образом с Samsung Galaxy SIII). Этот метод доступен только с HONEYCOMB (api11), поэтому имейте это в виду при разработке для старых версий Android.

Также указано, что ваш EditText не должен быть первым видом для получения фокуса при запуске активности (если это – просто requestFocus () из другого представления). Хотя у меня (лично) не было никаких проблем с этим.

Вместо того, чтобы просто использовать пользовательский вид для вашей пользовательской клавиатуры, почему бы не реализовать полноценный IME? Это решит вашу проблему с курсором и даже сделает вашу клавиатуру доступной вне вашего приложения (если хотите).

Этот ответ содержит пару полезных ссылок, если вы хотите это сделать: как разработать мягкую клавиатуру для Android?

Я действительно не предлагал бы этого. Написание полноценного IME действительно сложно. Кроме того, пользователи ожидают функциональность с клавиатуры (автоматическое исправление, Swyping, предсказание следующего слова, возможность изменения языков), которые у вас не будут, если вы не потратите месяцы на клавиатуре. Любое приложение, которое не позволит мне использовать Swype, будет немедленно удалено (примечание смещения: я работал над Swype android).

Но если вы хотите полностью интегрироваться с ОС в качестве клавиатуры, вам придется написать InputMethodService. Тогда ваша клавиатура будет выбираться пользователем в меню выбора клавиатуры и использоваться для любого приложения. Это единственный способ получить полную интеграцию с ОС, иначе вам нужно будет начать с нуля писать собственный EditView. Получайте удовольствие от этого, получив тот, который выглядит красиво, определенно нетривиальным.

Кроме того, установка типа ввода null не отключит большинство клавиатур. Он просто помещает их в немой режим и отключает такие вещи, как предсказание.

Я попробовал ответить ниже, и это сработало, но позаботьтесь о том, чтобы 1) EditText не фокусировался на инициализации 2) когда ваша ориентация меняется, когда фокус пользователя находится на editText, появляется всплывающая клавиатура, что является еще одной «решаемой» проблемой ,

Это было упомянуто в предыдущем ответе, но будьте осторожны, чтобы вы ДОЛЖНЫ убедиться, что ваш элемент editText не фокусируется на создании экземпляра:

https://code.google.com/p/android/issues/detail?id=27609#c7

# 7 nyphb … @ gmail.com

Я наконец нашел для меня рабочее решение.

Первая часть (in onCreate):

 mText.setInputType(InputType.TYPE_NULL); if (android.os.Build.VERSION.SDK_INT >= 11 /*android.os.Build.VERSION_CODES.HONEYCOMB*/) { // this fakes the TextView (which actually handles cursor drawing) // into drawing the cursor even though you've disabled soft input // with TYPE_NULL mText.setRawInputType(InputType.TYPE_CLASS_TEXT); } 

Кроме того, для android: textIsSelectable необходимо установить значение true (или установить в onCreate), и EditText не должен фокусироваться на инициализации. Если ваш EditText является первым настраиваемым представлением (что было в моем случае), вы можете обойти это, поставив его чуть выше него:

 <LinearLayout android:layout_width="0px" android:layout_height="0px" android:focusable="true" android:focusableInTouchMode="true" > <requestFocus /> </LinearLayout>