Wyłącz migający kursor EditText

180

Czy ktoś wie, jak wyłączyć migający kursor w EditTextwidoku?

Kevin Parker
źródło

Odpowiedzi:

355

Możesz użyć atrybutu xml android:cursorVisible="false"lub funkcji Java setCursorVisible(false).

Vic
źródło
13
Niesamowite, to razem z onclicklistener sprawia, że widoczne daje poprawne zachowanie :)
Warpzit
1
@cerin jest sposób, aby ukryć niebieski znacznik, abym mógł wyłączyć wklejanie, ale pozostaw kursor widoczny, aby użytkownik zobaczył, gdzie jest w polu?
limlim
9
Czy można wyłączyć samo mruganie, a nie kursor?
programista Androida
35

Idealne rozwiązanie, które idzie dalej do celu

Cel: Wyłącz migający kursor, gdy EditTextnie jest ostry, i włącz migający kursor, gdy EditTextjest ostry. Poniżej otwiera także klawiaturę po EditTextkliknięciu i ukrywa ją po naciśnięciu klawisza gotowe na klawiaturze.

1) Ustaw w swoim xml pod EditText:

android:cursorVisible="false"

2) Ustaw onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

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

    }
};

3) następnie onCreateuchwycić zdarzenie, gdy gotowe jest wciśnięty przy użyciu OnEditorActionListenerdo EditText, a następnie 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;
            }
        });
coolcool1994
źródło
6
KeyEvent.KEYCODE_ENTER nie będzie działać na wszystkich klawiaturach. Musisz w szczególności wspomnieć o Androidzie: imeOptions = "actionDone" w układzie, a następnie również obsługiwać EditorInfo.IME_ACTION_DONE.
PsyGik
Świetna odpowiedź powinna zastąpić tylko na kliknięcia w dotyku, ponieważ niektóre edit czas zysk tekst bez ostrości na kliknięcia więc w tym przypadku kursor przyzwyczajenie być pokazane
Antwan
10

Możesz użyć następującego kodu do włączania i wyłączania edytowania kursora tekstowego przez programowo.

Aby włączyć kursor

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

Aby wyłączyć kursor

    editText.setCursorVisible(false);

Za pomocą XML włącz wyłącz kursor

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

Aby można było wybrać opcję edit_text (kopiuj / wytnij / wklej / wybierz / zaznacz wszystko)

   editText.setTextIsSelectable(true);

Aby skupić się na trybie dotykowym, napisz następujące wiersze w XML

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

programowo

  editText.requestFocusFromTouch();

Aby wyczyścić nacisk na tryb dotykowy

  editText.clearFocus()
Sagar
źródło
editText.clearFocus () jest tym, czego szukałem. Dzięki!! +1
iUser
3

Problem z ustawieniem widoczności kursora na prawda i fałsz może być problemem, ponieważ usuwa kursor, dopóki nie ustawi się go ponownie, a jednocześnie pole jest edytowalne, co nie jest dobrym doświadczeniem dla użytkownika.

więc zamiast używać

setCursorVisible(false)

po prostu zrób to w ten sposób

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

Powyższy kod usuwa fokus, który z kolei usuwa kursor. I włącza go ponownie, abyś mógł go ponownie dotknąć i móc go edytować. Podobnie jak zwykłe wrażenia użytkownika.

Vikas Kumar
źródło
2

W moim przypadku chciałem włączyć / wyłączyć kursor, gdy edycja jest skoncentrowana.

W twojej działalności:

@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);
}
MontiRabbit
źródło
Całkiem pewny, że chcesz, edit.setCursorVisible(!isKeyboardOpen);aby edit.setCursorVisible(isKeyboardOpen);kursor był widoczny, gdy klawiatura jest obecna.
Daniel Storm
2

po prostu dodaj tę linię do układu nadrzędnego

<?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>
Wyjątek wskaźnika zerowego
źródło
1

Jeśli chcesz zignorować Edittextod początku działalności android:focusablei android:focusableInTouchModepomoże ci inshallah.

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

To LinearLayoutz twoim Edittext.

Sajid Khan
źródło
0
  1. Zmień fokus na inny widok (np. Dowolny widok tekstu lub Linearlayout w XML) za pomocą

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. ustaw addTextChangedListener na edittext w Activity.

  3. a potem po zmianie tekstu na Edittext edittext.clearFocus();

Umożliwi to kursor, gdy klawiatura jest otwarta i wyłącza, gdy klawiatura jest zamknięta.

Bhavani PK
źródło
0

W kotlin your_edittext.isCursorVisible = false

Rohit Rohit
źródło
Sformatuj znaczniki. Możesz to zrobić, wcinając kod o 4 spacje.
Danon