Deaktivieren Sie den blinkenden EditText-Cursor


Antworten:


354

Sie können entweder das XML-Attribut android:cursorVisible="false"oder die Java-Funktion verwenden setCursorVisible(false).


13
Genial, dies zusammen mit onclicklistener, der es sichtbar macht, ergibt das richtige Verhalten :)
Warpzit

1
@cerin gibt es eine Möglichkeit, die blaue Markierung auszublenden, damit ich das Einfügen deaktivieren kann, aber den Cursor sichtbar halten kann, damit der Benutzer sieht, wo er sich im Feld befindet?
Limlim

9
Ist es möglich, nur das Blinken selbst und nicht den Cursor zu deaktivieren?
Android-Entwickler

35

Perfekte Lösung, die weiter zum Ziel führt

Ziel: Deaktivieren Sie den blinkenden Cursor, wenn er EditTextnicht scharfgestellt ist, und aktivieren Sie den blinkenden Cursor, wenn er scharfgestellt EditTextist. Unten öffnet sich auch die Tastatur, wennEditText klicken, und sie wird ausgeblendet, wenn Sie auf der Tastatur auf Fertig drücken.

1) Stellen Sie in Ihrer XML unter Ihre EditText:

android:cursorVisible="false"

2) OnClickListener einstellen:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

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

    }
};

3) onCreateErfassen Sie dann das Ereignis, wenn Sie fertig sind , und drücken OnEditorActionListenerSie EditTextdann auf 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 funktioniert nicht für alle Tastaturen. Sie müssen android: imeOptions = "actionDone" im Layout ausdrücklich erwähnen und dann auch EditorInfo.IME_ACTION_DONE behandeln.
PsyGik

Eine gute Antwort sollte nur beim Klicken durch Berühren ersetzt werden, da einige Zeit beim Bearbeiten von Text der Fokus ohne Klicken erreicht wird. In diesem Fall wird der Cursor nicht angezeigt
Antwan

10

Sie können den folgenden Code zum programmgesteuerten Aktivieren und Deaktivieren des Bearbeitungs-Textcursors verwenden.

Cursor aktivieren

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

Cursor deaktivieren

    editText.setCursorVisible(false);

Mit XML aktivieren Sie den Cursor deaktivieren

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

So bearbeiten Sie edit_text wählbar auf (kopieren / ausschneiden / einfügen / auswählen / alle auswählen)

   editText.setTextIsSelectable(true);

Um sich auf den Touch-Modus zu konzentrieren, schreiben Sie die folgenden Zeilen in XML

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

programmatisch

  editText.requestFocusFromTouch();

So löschen Sie den Fokus auf den Touch-Modus

  editText.clearFocus()

editText.clearFocus () ist das, wonach ich gesucht habe. Vielen Dank!! +1
iUser

3

Das Problem beim Setzen der Cursorsichtbarkeit auf true und false kann ein Problem sein, da der Cursor entfernt wird, bis Sie ihn erneut setzen und gleichzeitig das Feld bearbeitet werden kann, was keine gute Benutzererfahrung darstellt.

also anstatt zu benutzen

setCursorVisible(false)

mach es einfach so

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

Der obige Code entfernt den Fokus, wodurch wiederum der Cursor entfernt wird. Und aktiviert es wieder, so dass Sie es wieder berühren und bearbeiten können. Genau wie bei einer normalen Benutzererfahrung.


2

In meinem Fall wollte ich den Cursor aktivieren / deaktivieren, wenn die Bearbeitung fokussiert ist.

In Ihrer Aktivität:

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

Ziemlich sicher, dass Sie so sein möchten edit.setCursorVisible(!isKeyboardOpen);, edit.setCursorVisible(isKeyboardOpen);dass der Cursor sichtbar ist, wenn die Tastatur vorhanden ist.
Daniel Storm

2

Fügen Sie diese Zeile einfach in Ihr übergeordnetes Layout ein

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

Wenn Sie das Edittextvon Beginn der Aktivität an ignorieren möchten android:focusableund android:focusableInTouchModeIhnen helfen werden, 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">

Das LinearLayoutmit deinem Edittext.


0
  1. Ändern Sie den Fokus mithilfe von auf eine andere Ansicht (z. B. eine beliebige Textansicht oder ein lineares Layout im XML)

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. Setzen Sie addTextChangedListener in Activity auf edittext.

  3. und dann nach dem Textwechsel von Edittext setzen edittext.clearFocus();

Dadurch wird der Cursor bei geöffneter Tastatur aktiviert und bei geschlossener Tastatur deaktiviert.


0

In kotlin your_edittext.isCursorVisible = false


Bitte formatieren Sie das Markup. Sie können dies tun, indem Sie den Code um 4 Leerzeichen einrücken.
Danon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.