Désactiver le curseur clignotant EditText

180

Quelqu'un sait-il comment désactiver le curseur clignotant dans une EditTextvue?

Kevin Parker
la source

Réponses:

355

Vous pouvez utiliser l'attribut xml android:cursorVisible="false"ou la fonction java setCursorVisible(false).

Vic
la source
13
Génial, ceci avec onclicklistener qui le rend visible donne le bon comportement :)
Warpzit
1
@cerin existe-t-il un moyen de masquer le marqueur bleu pour que je puisse désactiver le collage, mais garder le curseur visible pour que l'utilisateur voie où est-il dans le champ?
limlim
9
Est-il possible de désactiver uniquement le clignotement lui-même, et non le curseur?
développeur android
35

Solution parfaite qui va plus loin dans l'objectif

Objectif: désactiver le curseur clignotant lorsqu'il EditTextn'est pas mis au point et activer le curseur clignotant lorsqu'il EditTextest mis au point. Ci-dessous ouvre également le clavier lorsqueEditText cliquez sur, et le cache lorsque vous appuyez sur Terminé dans le clavier.

1) Définissez votre xml sous votre EditText:

android:cursorVisible="false"

2) Réglez onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

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

    }
};

3) puis onCreate, capturez l'événement lorsque OnEditorActionListenervous avez terminé est pressé à l'aide de votre EditText, puis 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
la source
6
KeyEvent.KEYCODE_ENTER ne fonctionnera pas pour tous les claviers. Vous devrez mentionner spécifiquement android: imeOptions = "actionDone" dans la mise en page, puis gérer également EditorInfo.IME_ACTION_DONE.
PsyGik
Une excellente réponse devrait simplement remplacer le clic par le toucher car un certain temps, modifier le texte, gagner le focus sans clic, donc dans ce cas, le curseur ne sera pas affiché
Antwan
10

Vous pouvez utiliser le code suivant pour activer et désactiver le curseur d'édition de texte par programme.

Pour activer le curseur

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

Pour désactiver le curseur

    editText.setCursorVisible(false);

Utilisation du curseur de désactivation d'activation XML

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

Pour rendre edit_text sélectionnable sur (copier / couper / coller / sélectionner / sélectionner tout)

   editText.setTextIsSelectable(true);

Pour vous concentrer sur le mode tactile, écrivez les lignes suivantes en XML

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

par programmation

  editText.requestFocusFromTouch();

Pour effacer la mise au point en mode tactile

  editText.clearFocus()
Sagar
la source
editText.clearFocus () est ce que je cherchais. Merci!! +1
iUser
3

Le problème avec la définition de la visibilité du curseur sur true et false peut être un problème car il supprime le curseur jusqu'à ce que vous le redéfinissiez et que le champ soit en même temps modifiable, ce qui n'est pas une bonne expérience utilisateur.

donc au lieu d'utiliser

setCursorVisible(false)

fais-le comme ça

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

Le code ci-dessus supprime le focus qui à son tour supprime le curseur. Et le réactiver pour que vous puissiez à nouveau le toucher et pouvoir le modifier. Tout comme l'expérience utilisateur normale.

Vikas Kumar
la source
2

Dans mon cas, je voulais activer / désactiver le curseur lorsque l'édition est focalisée.

Dans votre activité:

@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
la source
Assez sûr que vous voulez edit.setCursorVisible(!isKeyboardOpen);être edit.setCursorVisible(isKeyboardOpen);pour que le curseur soit visible lorsque le clavier est présent.
Daniel Storm
2

ajoutez simplement cette ligne dans votre mise en page parent

<?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>
Exception de pointeur nul
la source
1

Si vous voulez ignorer le Edittextdès le début de l'activité, android:focusableet android:focusableInTouchModevous aidera 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">

Ceci LinearLayoutavec votre Edittext.

Sajid khan
la source
0
  1. Changez le focus sur une autre vue (ex: toute vue de texte ou Linearlayout dans le XML) à l'aide de

    android:focusableInTouchMode="true"
    android:focusable="true"
  2. définissez addTextChangedListener sur edittext dans Activity.

  3. puis sur aftertextchanged de Edittext mis edittext.clearFocus();

Cela activera le curseur lorsque le clavier est ouvert et le désactivera lorsque le clavier est fermé.

Bhavani PK
la source
0

Dans kotlin your_edittext.isCursorVisible = false

Rohit Rohit
la source
Veuillez formater le balisage. Vous pouvez le faire en indentant le code de 4 espaces.
Danon
-1

rootLayout.findFocus (). clearFocus ();

Pratik Lahoti
la source