Est-ce que quelqu'un sait comment désactiver le curseur clignotant dans une vue EditText
?
Vous pouvez utiliser l'attribut xml Android:cursorVisible="false"
ou la fonction Java setCursorVisible(false)
.
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;
}
});
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()
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);
}
Changez le focus en une autre vue (ex: Toute textview ou Linearlayout dans le XML) en utilisant
Android:focusableInTouchMode="true"
Android:focusable="true"
définissez addTextChangedListener sur edittext dans Activity.
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é.
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 votreEdittext
.
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>
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.