Est-ce que quelqu'un sait comment désactiver le curseur clignotant dans une EditText
vue ?
Génial, ceci avec le onclicklistener qui le rend visible donne le comportement correct :)
Est-ce que quelqu'un sait comment désactiver le curseur clignotant dans une EditText
vue ?
@cerin existe-t-il un moyen de cacher le marqueur bleu afin de désactiver le collage, mais de garder le curseur visible afin que l'utilisateur puisse voir où il se trouve dans le champ ?
Solution parfaite qui va plus loin que l'objectif
Objectif : désactiver le curseur clignotant lorsque EditText
n'est pas mise au point, et activer le curseur clignotant lorsque EditText
est en ligne de mire. Below ouvre également le clavier lorsque EditText
est cliqué, et le cache lorsque vous appuyez sur done dans le clavier.
1) Définissez dans votre xml sous votre EditText
:
android:cursorVisible="false"
2) Définissez le récepteur onClickListener :
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) alors onCreate
capturer l'événement lorsque l'on appuie sur "done" en utilisant OnEditorActionListener
à votre EditText
et ensuite 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;
}
});
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.
Vous pouvez utiliser le code suivant pour activer et désactiver le curseur d'édition de texte par programmation.
Pour activer le curseur
editText.requestFocus();
editText.setCursorVisible(true);
Pour désactiver le curseur
editText.setCursorVisible(false);
Utilisation de XML pour activer ou désactiver le curseur
android:cursorVisible="false/true"
android:focusable="false/true"
Pour rendre l'edit_text sélectionnable à (copier/couper/coller/sélectionner/sélectionner tout)
editText.setTextIsSelectable(true);
Pour se concentrer sur le mode tactile, écrivez les lignes suivantes dans XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
de manière programmée
editText.requestFocusFromTouch();
Pour effacer la mise au point en mode tactile
editText.clearFocus()
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>
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);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.