Quelqu'un sait-il comment désactiver le curseur clignotant dans une EditText
vue?
Quelqu'un sait-il comment désactiver le curseur clignotant dans une EditText
vue?
Réponses:
Vous pouvez utiliser l'attribut xml android:cursorVisible="false"
ou la fonction java setCursorVisible(false)
.
Solution parfaite qui va plus loin dans l'objectif
Objectif: désactiver le curseur clignotant lorsqu'il EditText
n'est pas mis au point et activer le curseur clignotant lorsqu'il EditText
est 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 OnEditorActionListener
vous 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;
}
});
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()
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.
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);
}
edit.setCursorVisible(!isKeyboardOpen);
être edit.setCursorVisible(isKeyboardOpen);
pour que le curseur soit visible lorsque le clavier est présent.
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>
Si vous voulez ignorer le Edittext
dès le début de l'activité, android:focusable
et android:focusableInTouchMode
vous 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
LinearLayout
avec votreEdittext
.
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"
définissez addTextChangedListener sur edittext dans Activity.
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é.
Dans kotlin your_edittext.isCursorVisible = false
rootLayout.findFocus (). clearFocus ();