web-dev-qa-db-fra.com

Désactiver le curseur clignotant EditText

Est-ce que quelqu'un sait comment désactiver le curseur clignotant dans une vue EditText?

160
Kevin Parker

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

319
Vic

Solution parfaite qui va plus loin que l'objectif

Objectif: Désactiver le curseur clignotant lorsque EditText n'est pas au point et activer le curseur clignotant lorsque EditText est au point. Ci-dessous s’ouvre également le clavier lorsque vous cliquez sur EditText et le masque lorsque vous appuyez sur la touche Terminé du clavier.

1) Placez dans votre xml sous votre EditText

Android:cursorVisible="false"

2) Définissez 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 vous avez terminé, appuyez sur OnEditorActionListener pour 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;
            }
        });
27
coolcool1994

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

Activer le curseur

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

Pour désactiver le curseur

    editText.setCursorVisible(false);

En utilisant XML activer le curseur de désactivation

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

Pour que edit_text puisse être sélectionné (copier/couper/coller/sélectionner/tout sélectionner)

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

Dans mon cas, je voulais activer/désactiver le curseur lorsque le montage est activé.

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);
}
1
MontiRabbit
  1. Changez le focus en une autre vue (ex: Toute textview ou Linearlayout dans le XML) en utilisant 

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

  3. et ensuite sur aftertextchanged de Edittext put edittext.clearFocus();

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

0
Bhavani PK

Si vous voulez ignorer la Edittext du début de l'activité, Android:focusable et Android:focusableInTouchMode vous aideront.

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

Cette LinearLayout avec votre Edittext.

0
Sajid khan

simple ajouter 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>
0

Le problème de définition de la visibilité du curseur sur vrai et faux 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 juste comme ça

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

Le code ci-dessus supprime le focus, ce qui supprime le curseur. Et l'activez à nouveau afin que vous puissiez à nouveau le toucher et pouvoir le modifier. Tout comme l'expérience utilisateur normale.

0
vikas kumar