Qualcuno sa come disabilitare il cursore lampeggiante in una EditText
vista?
Qualcuno sa come disabilitare il cursore lampeggiante in una EditText
vista?
Risposte:
È possibile utilizzare l'attributo xml android:cursorVisible="false"
o la funzione java setCursorVisible(false)
.
Soluzione perfetta che va oltre l'obiettivo
Obiettivo: disabilitare il cursore lampeggiante quando EditText
non è attivo e abilitare il cursore lampeggiante quando EditText
è attivo . Di seguito apre anche la tastiera quando si EditText
fa clic e la nasconde quando si preme Fine sulla tastiera.
1) Imposta nel tuo xml sotto EditText
:
android:cursorVisible="false"
2) Imposta onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) quindi onCreate
, cattura l'evento quando finito viene premuto usando OnEditorActionListener
sul tuo EditText
, e poi 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;
}
});
È possibile utilizzare il codice seguente per abilitare e disabilitare il cursore di modifica testo in modo programmatico.
Per abilitare il cursore
editText.requestFocus();
editText.setCursorVisible(true);
Per disabilitare il cursore
editText.setCursorVisible(false);
Utilizzando XML abilitare il cursore di disabilitazione
android:cursorVisible="false/true"
android:focusable="false/true"
Per rendere edit_text selezionabile su (copia / taglia / incolla / seleziona / seleziona tutto)
editText.setTextIsSelectable(true);
Per concentrarti sulla modalità touch scrivi le seguenti righe in XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
a livello di codice
editText.requestFocusFromTouch();
Per cancellare la messa a fuoco sulla modalità touch
editText.clearFocus()
Il problema con l'impostazione della visibilità del cursore su vero e falso può essere un problema poiché rimuove il cursore fino a quando non lo si reimposta di nuovo e allo stesso tempo il campo è modificabile, il che non è una buona esperienza utente.
quindi invece di usare
setCursorVisible(false)
fallo così
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Il codice sopra rimuove il focus che a sua volta rimuove il cursore. E lo abilita di nuovo in modo da poterlo toccare nuovamente e poterlo modificare. Proprio come la normale esperienza utente.
Nel mio caso, volevo abilitare / disabilitare il cursore quando la modifica è focalizzata.
Nella tua attività:
@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);
essere in edit.setCursorVisible(isKeyboardOpen);
modo che il cursore sia visibile quando è presente la tastiera.
aggiungi semplicemente questa riga nel layout principale
<?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>
Se vuoi ignorare Edittext
dall'inizio dell'attività android:focusable
e android:focusableInTouchMode
ti aiuterà a 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">
Questo
LinearLayout
con il tuoEdittext
.
Cambia lo stato attivo in un'altra vista (es: qualsiasi visualizzazione di testo o Linearlayout nell'XML) utilizzando
android:focusableInTouchMode="true"
android:focusable="true"
imposta addTextChangedListener su edittext in Activity.
e poi su aftertextchange di Edittext put edittext.clearFocus()
;
Ciò abiliterà il cursore quando la tastiera è aperta e disabiliterà quando la tastiera è chiusa.
In kotlin your_edittext.isCursorVisible = false
. RootLayout.findFocus () clearFocus ();