Вимкнути миготливий курсор EditText


Відповіді:


355

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


13
Дивовижно, це разом з onclicklistener, що робить його видимим, дає правильну поведінку :)
Warpzit

1
@cerin є спосіб приховати синій маркер, щоб я міг відключити пасту, але зберегти курсор видимим, щоб користувач побачив, де він знаходиться в полі?
limlim

9
Чи можна відключити саме мигання, а не курсор?
андроїд розробник

35

Ідеальне рішення, яке йде далі до мети

Мета: вимкніть миготливий курсор, коли 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
KeyEvent.KEYCODE_ENTER працюватиме не для всіх клавіатур. Вам потрібно буде спеціально згадати android: imeOptions = "actionDone" в макеті, а потім обробити EditorInfo.IME_ACTION_DONE також.
PsyGik

Чудова відповідь просто повинна замінити натискання на натискання, тому що деякий час редагувати посилення тексту можна без натискання, тому в цьому випадку курсор не буде показаний
Антван

10

Ви можете використовувати наступний код для включення та відключення редагування текстового курсору програмним шляхом.

Щоб увімкнути курсор

    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()

editText.clearFocus () - це те, що я шукав. Дякую!! +1
iUser

3

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

тому замість використання

setCursorVisible(false)

просто зроби це так

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

Вищевказаний код видаляє фокус, який, у свою чергу, видаляє курсор. І вмикає його знову, щоб ви могли знову торкнутися його та мати змогу редагувати. Так само, як і звичайний досвід користувача.


2

У моєму випадку я хотів увімкнути / відключити курсор, коли редагування зосереджено.

У вашій діяльності:

@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);
}

Ви впевнені, що хочете edit.setCursorVisible(!isKeyboardOpen);бути edit.setCursorVisible(isKeyboardOpen);таким, щоб курсор був видно, коли клавіатура присутня.
Даніель Шторм

2

просто додайте цей рядок у батьківський макет

<?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>

1

Якщо ви хочете , щоб ігнорувати 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.


0
  1. Змініть фокус на інший вигляд (наприклад, будь-який перегляд тексту або лінійний розміщення в XML), використовуючи

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

  3. а потім на післязаміненому редагуванні встановити Edittext edittext.clearFocus();

Це дозволить курсору, коли клавіатура відкрито, і відключити, коли клавіатура закрита.


0

У kotlin your_edittext.isCursorVisible = false


Будь ласка, відформатуйте розмітку. Це можна зробити, відступивши код на 4 пробіли.
Данон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.