Kann jemand den blinkenden Cursor in einer EditText
-Ansicht deaktivieren?
Sie können entweder das XML-Attribut Android:cursorVisible="false"
oder die Java-Funktion setCursorVisible(false)
verwenden.
Perfekte Lösung, die zum Ziel führt
Ziel: Deaktivieren Sie den blinkenden Cursor, wenn EditText
nicht im Fokus ist, und aktivieren Sie den blinkenden Cursor, wenn EditText
im Fokus ist. Unten wird auch die Tastatur geöffnet, wenn auf EditText
geklickt wird, und wird ausgeblendet, wenn Sie auf der Tastatur auf Fertig drücken.
1) Setzen Sie in Ihrer XML-Datei unter Ihrer EditText
:
Android:cursorVisible="false"
2) Setze onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) dann onCreate
, erfassen Sie das Ereignis, wenn fertig mit OnEditorActionListener
auf Ihre EditText
und dann auf setCursorVisible(false)
gedrückt wird.
//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;
}
});
Sie können folgenden Code verwenden, um den Editier-Textcursor programmgesteuert zu aktivieren und zu deaktivieren.
Cursor aktivieren
editText.requestFocus();
editText.setCursorVisible(true);
Cursor deaktivieren
editText.setCursorVisible(false);
Verwenden Sie XML, um den Cursor zu deaktivieren
Android:cursorVisible="false/true"
Android:focusable="false/true"
Edit_text auswählbar machen für (kopieren/ausschneiden/einfügen/alles auswählen/auswählen)
editText.setTextIsSelectable(true);
Um sich auf den Touch-Modus zu konzentrieren, schreiben Sie folgende Zeilen in XML
Android:focusableInTouchMode="true"
Android:clickable="true"
Android:focusable="true"
programmatisch
editText.requestFocusFromTouch();
Um den Fokus auf den Touch-Modus zu löschen
editText.clearFocus()
In meinem Fall wollte ich den Cursor aktivieren/deaktivieren, wenn die Bearbeitung fokussiert ist.
In Ihrer Aktivität:
@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);
}
Ändern Sie den Fokus auf eine andere Ansicht (z. B. eine beliebige Textansicht oder ein lineares Layout in der XML)
Android:focusableInTouchMode="true"
Android:focusable="true"
setzen Sie addTextChangedListener in Activity auf edittext.
und dann bei afterertextchanged von Edittext edittext.clearFocus()
;
Dadurch wird der Cursor bei geöffneter Tastatur aktiviert und beim Schließen der Tastatur deaktiviert.
Wenn Sie die Edittext
vom Beginn der Aktivität aus ignorieren möchten, helfen Android:focusable
und Android:focusableInTouchMode
Ihnen dabei.
<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">
Diese
LinearLayout
mit IhrerEdittext
.
fügen Sie diese Zeile einfach in Ihr übergeordnetes Layout ein
<?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>
Das Problem beim Setzen der Cursorsichtbarkeit auf "true" und "false" kann ein Problem sein, da der Cursor so lange entfernt wird, bis Sie ihn erneut setzen und das Feld gleichzeitig bearbeitbar ist. Dies ist keine gute Benutzererfahrung.
also anstatt zu benutzen
setCursorVisible(false)
mach es einfach so
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Der obige Code entfernt den Fokus, der wiederum den Cursor entfernt. Und aktiviert es erneut, sodass Sie es erneut berühren und bearbeiten können. Genau wie normale Benutzererfahrung.