Weiß jemand, wie man den blinkenden Cursor in einer EditTextAnsicht deaktiviert ?
Weiß jemand, wie man den blinkenden Cursor in einer EditTextAnsicht deaktiviert ?
Antworten:
Sie können entweder das XML-Attribut android:cursorVisible="false"oder die Java-Funktion verwenden setCursorVisible(false).
Perfekte Lösung, die weiter zum Ziel führt
Ziel: Deaktivieren Sie den blinkenden Cursor, wenn er EditTextnicht scharfgestellt ist, und aktivieren Sie den blinkenden Cursor, wenn er scharfgestellt EditTextist. Unten öffnet sich auch die Tastatur, wennEditText klicken, und sie wird ausgeblendet, wenn Sie auf der Tastatur auf Fertig drücken.
1) Stellen Sie in Ihrer XML unter Ihre EditText:
android:cursorVisible="false"
2) OnClickListener einstellen:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) onCreateErfassen Sie dann das Ereignis, wenn Sie fertig sind , und drücken OnEditorActionListenerSie EditTextdann auf 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;
}
});
Sie können den folgenden Code zum programmgesteuerten Aktivieren und Deaktivieren des Bearbeitungs-Textcursors verwenden.
Cursor aktivieren
editText.requestFocus();
editText.setCursorVisible(true);
Cursor deaktivieren
editText.setCursorVisible(false);
Mit XML aktivieren Sie den Cursor deaktivieren
android:cursorVisible="false/true"
android:focusable="false/true"
So bearbeiten Sie edit_text wählbar auf (kopieren / ausschneiden / einfügen / auswählen / alle auswählen)
editText.setTextIsSelectable(true);
Um sich auf den Touch-Modus zu konzentrieren, schreiben Sie die folgenden Zeilen in XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
programmatisch
editText.requestFocusFromTouch();
So löschen Sie den Fokus auf den Touch-Modus
editText.clearFocus()
Das Problem beim Setzen der Cursorsichtbarkeit auf true und false kann ein Problem sein, da der Cursor entfernt wird, bis Sie ihn erneut setzen und gleichzeitig das Feld bearbeitet werden kann, was keine gute Benutzererfahrung darstellt.
also anstatt zu benutzen
setCursorVisible(false)
mach es einfach so
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Der obige Code entfernt den Fokus, wodurch wiederum der Cursor entfernt wird. Und aktiviert es wieder, so dass Sie es wieder berühren und bearbeiten können. Genau wie bei einer normalen Benutzererfahrung.
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);
}
edit.setCursorVisible(!isKeyboardOpen);, edit.setCursorVisible(isKeyboardOpen);dass der Cursor sichtbar ist, wenn die Tastatur vorhanden ist.
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>
Wenn Sie das Edittextvon Beginn der Aktivität an ignorieren möchten android:focusableund android:focusableInTouchModeIhnen helfen werden, 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">
Das
LinearLayoutmit deinemEdittext.
Ändern Sie den Fokus mithilfe von auf eine andere Ansicht (z. B. eine beliebige Textansicht oder ein lineares Layout im XML)
android:focusableInTouchMode="true"
android:focusable="true"Setzen Sie addTextChangedListener in Activity auf edittext.
und dann nach dem Textwechsel von Edittext setzen edittext.clearFocus();
Dadurch wird der Cursor bei geöffneter Tastatur aktiviert und bei geschlossener Tastatur deaktiviert.
In kotlin your_edittext.isCursorVisible = false