Отключить мигающий курсор EditText

Кто-нибудь знает, как отключить мигающий курсор в представлении EditText?

Ответ 1

Вы можете использовать либо атрибут xml android:cursorVisible="false", либо java-функцию setCursorVisible(false).

Ответ 2

Идеальное решение, которое идет дальше цели

Цель: отключить мигающий курсор, если EditText не находится в фокусе, и включить мигающий курсор, когда EditText находится в фокусе. Ниже также открывается клавиатура, когда нажата кнопка EditText, и скрывается, когда вы нажимаете ее на клавиатуре.

1) Установите в свой xml под EditText:

android:cursorVisible="false"

2) Установите onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

    public void onClick(View v) 
    {
         if (v.getId() == iEditText.getId()) 
        {
            iEditText.setCursorVisible(true);
        }

    }
};

3), затем onCreate, запишите событие, когда сделано, нажав OnEditorActionListener, на EditText, а затем setCursorVisible(false).

//onCreate...

iEditText.setOnEditorActionListener(new OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId,
                    KeyEvent event) {
                    iEditText.setCursorVisible(false);
                if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    in.hideSoftInputFromWindow(iEditText.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
                }
                return false;
            }
        });

Ответ 3

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

Чтобы включить курсор

    editText.requestFocus();
    editText.setCursorVisible(true);

Отключить курсор

    editText.setCursorVisible(false);

Использование запрета на использование XML

   android:cursorVisible="false/true"
   android:focusable="false/true"

Сделать edit_text Выбирается для (копировать/вырезать/вставлять/выбирать/выбирать все)

   editText.setTextIsSelectable(true);

Чтобы сфокусироваться на сенсорном режиме, напишите следующие строки в XML

  android:focusableInTouchMode="true"
  android:clickable="true"
  android:focusable="true" 

программно

  editText.requestFocusFromTouch();

Чтобы очистить фокусировку на сенсорном режиме

  editText.clearFocus()

Ответ 4

В моем случае я хотел включить/отключить курсор, когда сфокусировано редактирование.

В вашей деятельности:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if (v instanceof EditText) {
            EditText edit = ((EditText) v);
            Rect outR = new Rect();
            edit.getGlobalVisibleRect(outR);
            Boolean isKeyboardOpen = !outR.contains((int)ev.getRawX(), (int)ev.getRawY());
            System.out.print("Is Keyboard? " + isKeyboardOpen);
            if (isKeyboardOpen) {
                System.out.print("Entro al IF");
                edit.clearFocus();
                InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
            }

            edit.setCursorVisible(!isKeyboardOpen);

        }
    }
    return super.dispatchTouchEvent(ev);
}

Ответ 5

Если вы хотите игнорировать Edittext с самого начала действия, вам помогут android:focusable и android:focusableInTouchMode focusableInTouchMode.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout7" android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true" android:focusableInTouchMode="true">

Это LinearLayout с вашим Edittext.

Ответ 6

  1. Смена фокуса на другое представление (например, любое текстовое представление или линейное наложение в XML), используя

    android:focusableInTouchMode="true"
    android:focusable="true"
    
  2. установите addTextChangedListener для редактирования текста в Activity.

  3. и затем после обмена текстовым edittext.clearFocus() введите edittext.clearFocus();

Это активирует курсор, когда клавиатура открыта, и отключается, когда клавиатура закрыта.

Ответ 7

просто добавьте эту строку в ваш родительский макет

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <EditText
        android:inputType="text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

Ответ 8

Когда мы используем editText в переработчике, ни один код не работает должным образом!

Ответ 9

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

поэтому вместо использования

setCursorVisible(false)

просто сделай это так

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

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