wake-up-neo.com

Deaktivieren Sie den blinkenden EditText-Cursor

Kann jemand den blinkenden Cursor in einer EditText-Ansicht deaktivieren?

160
Kevin Parker

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

319
Vic

Perfekte Lösung, die zum Ziel führt

Ziel: Deaktivieren Sie den blinkenden Cursor, wenn EditText nicht im Fokus ist, und aktivieren Sie den blinkenden Cursor, wenn EditText im Fokus ist. Unten wird auch die Tastatur geöffnet, wenn auf EditText geklickt wird, und wird ausgeblendet, wenn Sie auf der Tastatur auf Fertig drücken.

1) Setzen Sie in Ihrer XML-Datei unter Ihrer EditText

Android:cursorVisible="false"

2) Setze onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

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

    }
};

3) dann onCreate, erfassen Sie das Ereignis, wenn fertig mit OnEditorActionListener auf Ihre EditText und dann auf setCursorVisible(false) gedrückt wird.

//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;
            }
        });
27
coolcool1994

Sie können folgenden Code verwenden, um den Editier-Textcursor programmgesteuert zu aktivieren und zu deaktivieren.

Cursor aktivieren

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

Cursor deaktivieren

    editText.setCursorVisible(false);

Verwenden Sie XML, um den Cursor zu deaktivieren

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

Edit_text auswählbar machen für (kopieren/ausschneiden/einfügen/alles auswählen/auswählen)

   editText.setTextIsSelectable(true);

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

  Android:focusableInTouchMode="true"
  Android:clickable="true"
  Android:focusable="true" 

programmatisch

  editText.requestFocusFromTouch();

Um den Fokus auf den Touch-Modus zu löschen 

  editText.clearFocus()
4
Sagar

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);
}
1
MontiRabbit
  1. Ändern Sie den Fokus auf eine andere Ansicht (z. B. eine beliebige Textansicht oder ein lineares Layout in der XML) 

    Android:focusableInTouchMode="true"
    Android:focusable="true"
    
  2. setzen Sie addTextChangedListener in Activity auf edittext.

  3. und dann bei afterertextchanged von Edittext edittext.clearFocus();

Dadurch wird der Cursor bei geöffneter Tastatur aktiviert und beim Schließen der Tastatur deaktiviert.

0
Bhavani PK

Wenn Sie die Edittext vom Beginn der Aktivität aus ignorieren möchten, helfen Android:focusable und Android:focusableInTouchMode Ihnen dabei.

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

Diese LinearLayout mit Ihrer Edittext.

0
Sajid khan

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>

Das Problem beim Setzen der Cursorsichtbarkeit auf "true" und "false" kann ein Problem sein, da der Cursor so lange entfernt wird, bis Sie ihn erneut setzen und das Feld gleichzeitig bearbeitbar ist. Dies ist keine gute Benutzererfahrung.

also anstatt zu benutzen

setCursorVisible(false)

mach es einfach so

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

Der obige Code entfernt den Fokus, der wiederum den Cursor entfernt. Und aktiviert es erneut, sodass Sie es erneut berühren und bearbeiten können. Genau wie normale Benutzererfahrung.

0
vikas kumar