Отключить мигающий курсор EditText - PullRequest
165 голосов
/ 07 апреля 2011

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

Ответы [ 8 ]

326 голосов
/ 30 апреля 2011

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

29 голосов
/ 29 ноября 2014

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

Цель: отключить мигающий курсор, когда 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;
            }
        });
6 голосов
/ 24 октября 2017

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

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

    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()
2 голосов
/ 29 августа 2016

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

В вашей активности:

@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);
}
0 голосов
/ 15 июля 2019

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

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

setCursorVisible(false)

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

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

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

0 голосов
/ 20 марта 2019

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

<?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>
0 голосов
/ 27 февраля 2019
  1. Смена фокуса на другое представление (например, любое текстовое представление или линейное наложение в XML) с использованием

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

  3. , а затем при последующем обмене Edittext положить edittext.clearFocus();

Это включит курсор при открытой клавиатуре и отключит при закрытой клавиатуре.

0 голосов
/ 17 января 2019

Если вы хотите игнорировать Edittext с начала деятельности, android:focusable и android: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.

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