Czy ktoś wie, jak wyłączyć migający kursor w EditText
widoku?
Czy ktoś wie, jak wyłączyć migający kursor w EditText
widoku?
Odpowiedzi:
Możesz użyć atrybutu xml android:cursorVisible="false"
lub funkcji Java setCursorVisible(false)
.
Idealne rozwiązanie, które idzie dalej do celu
Cel: Wyłącz migający kursor, gdy EditText
nie jest ostry, i włącz migający kursor, gdy EditText
jest ostry. Poniżej otwiera także klawiaturę po EditText
kliknięciu i ukrywa ją po naciśnięciu klawisza gotowe na klawiaturze.
1) Ustaw w swoim xml pod EditText
:
android:cursorVisible="false"
2) Ustaw onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) następnie onCreate
uchwycić zdarzenie, gdy gotowe jest wciśnięty przy użyciu OnEditorActionListener
do EditText
, a następnie 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;
}
});
Możesz użyć następującego kodu do włączania i wyłączania edytowania kursora tekstowego przez programowo.
Aby włączyć kursor
editText.requestFocus();
editText.setCursorVisible(true);
Aby wyłączyć kursor
editText.setCursorVisible(false);
Za pomocą XML włącz wyłącz kursor
android:cursorVisible="false/true"
android:focusable="false/true"
Aby można było wybrać opcję edit_text (kopiuj / wytnij / wklej / wybierz / zaznacz wszystko)
editText.setTextIsSelectable(true);
Aby skupić się na trybie dotykowym, napisz następujące wiersze w XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
programowo
editText.requestFocusFromTouch();
Aby wyczyścić nacisk na tryb dotykowy
editText.clearFocus()
Problem z ustawieniem widoczności kursora na prawda i fałsz może być problemem, ponieważ usuwa kursor, dopóki nie ustawi się go ponownie, a jednocześnie pole jest edytowalne, co nie jest dobrym doświadczeniem dla użytkownika.
więc zamiast używać
setCursorVisible(false)
po prostu zrób to w ten sposób
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Powyższy kod usuwa fokus, który z kolei usuwa kursor. I włącza go ponownie, abyś mógł go ponownie dotknąć i móc go edytować. Podobnie jak zwykłe wrażenia użytkownika.
W moim przypadku chciałem włączyć / wyłączyć kursor, gdy edycja jest skoncentrowana.
W twojej działalności:
@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);
aby edit.setCursorVisible(isKeyboardOpen);
kursor był widoczny, gdy klawiatura jest obecna.
po prostu dodaj tę linię do układu nadrzędnego
<?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>
Jeśli chcesz zignorować Edittext
od początku działalności android:focusable
i android:focusableInTouchMode
pomoże ci 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">
To
LinearLayout
z twoimEdittext
.
Zmień fokus na inny widok (np. Dowolny widok tekstu lub Linearlayout w XML) za pomocą
android:focusableInTouchMode="true"
android:focusable="true"
ustaw addTextChangedListener na edittext w Activity.
a potem po zmianie tekstu na Edittext edittext.clearFocus()
;
Umożliwi to kursor, gdy klawiatura jest otwarta i wyłącza, gdy klawiatura jest zamknięta.
W kotlin your_edittext.isCursorVisible = false