Weiß jemand, wie man den blinkenden Cursor in einer EditText
Ansicht deaktiviert ?
Weiß jemand, wie man den blinkenden Cursor in einer EditText
Ansicht 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 EditText
nicht scharfgestellt ist, und aktivieren Sie den blinkenden Cursor, wenn er scharfgestellt EditText
ist. 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) onCreate
Erfassen Sie dann das Ereignis, wenn Sie fertig sind , und drücken OnEditorActionListener
Sie EditText
dann 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 Edittext
von Beginn der Aktivität an ignorieren möchten android:focusable
und android:focusableInTouchMode
Ihnen 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
LinearLayout
mit 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