Désactiver le curseur clignotant EditText


Réponses:


355

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


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

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

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.


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

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>

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.


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é.


0

Dans kotlin your_edittext.isCursorVisible = false


Veuillez formater le balisage. Vous pouvez le faire en indentant le code de 4 espaces.
Danon

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.