Создание приложения калькулятора с кнопками и TextView с мигающим курсором и НЕТ фокусировки клавиатуры. Возможно ли использовать Canvas для рисования курсора? - PullRequest
0 голосов
/ 09 июля 2019

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

В настоящее время я использую временный метод, который заключается в использовании SpannableString для выделения ближайшего текстового символа, на котором находится курсор. Но, как вы знаете, это «выбирает» текущего персонажа. Я предпочитаю, чтобы курсор был между двумя символами, а не поверх одного символа.

Я также не хочу фокусировки на клавиатуре, потому что я уже выложил несколько приятных кнопок для взаимодействия с пользователем. Я не хочу, чтобы приложение использовало клавиатуру Android и методы ввода. Только моих кнопок должно быть достаточно.

Я пытался получить доступ к методам TextView:

  1. Снять фокус клавиатуры и ввод через манифест
  2. setFocusable (ложь)
  3. setFocusableInTouchMode (ложь)
  4. setCursorVisible (true) или cursorVisible = "true"

Это не сработало для меня. Я знаю, что если я сделаю TextView фокусируемым, то курсор будет виден. Но если он не фокусируется, курсор не отображается, даже если он есть: cursorVisible = "true".

Что мне делать?

1 Ответ

0 голосов
/ 09 июля 2019

Решение: Отключите метод ввода EditText, но продолжайте мигать курсор

Возможно, попробуйте полностью пропустить атрибут xml android:editable, а затем попробуйтеследуя в комбинации с

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

/*customized edittext class 
* for being typed in by private-to-your-app custom keyboard.
* borrowed from poster at /2859622/android-kak-otklychit-ime-dlya-edittext
*/
public class EditTextEx extends EditText {
    public EditTextEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override 
    public boolean onCheckIsTextEditor() {

        return false; //for some reason False leads to cursor never blinking or being visible even if setCursorVisible(true) was

, вызываемого в коде.}
}

Шаг 2 измените вышеприведенный метод на: return true;

Шаг 3 Добавьте другой метод к вышеуказанному классу.

@ Переопределите public boolean isTextSelectable (){верни истину;}

Шаг 4 В другом месте, где экземпляр этого класса был создан и вызван viewB Я добавил новый обработчик сенсорных событий

  viewB.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View view, MotionEvent event) {
          viewB.setCursorVisible(true);
          return false;
      }       });

Шаг 5 Проверьте, чтобы убедиться, что XMLи или код экземпляра EditText объявляет тип IME / клавиатуры как 'none'.Я не подтвердил актуальность, но я также использую фокусируемые атрибуты ниже.

<questionably.maybe.too.longofa.packagename.EditTextEx
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:inputType="none">

Извините за очень много атрибутов xml.Мой код использует их все, тестирование в 4.2.1, и дает результаты.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...