Хтось знає, як відключити миготливий курсор у EditText
поданні?
Хтось знає, як відключити миготливий курсор у EditText
поданні?
Відповіді:
Ви можете використовувати атрибут xml android:cursorVisible="false"
або функцію java setCursorVisible(false)
.
Ідеальне рішення, яке йде далі до мети
Мета: вимкніть миготливий курсор, коли EditText
він не знаходиться у фокусі, і ввімкніть миготливий курсор, коли EditText
знаходиться у фокусі. Знизу також відкривається клавіатура при EditText
натисканні кнопки та приховується, коли ви натискаєте на клавіатурі.
1) Встановіть свій xml під своїм EditText
:
android:cursorVisible="false"
2) Встановіть onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) потім onCreate
зафіксуйте подію, коли виконано, натискаючи OnEditorActionListener
на ваш EditText
, а потім 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;
}
});
Ви можете використовувати наступний код для включення та відключення редагування текстового курсору програмним шляхом.
Щоб увімкнути курсор
editText.requestFocus();
editText.setCursorVisible(true);
Вимкнути курсор
editText.setCursorVisible(false);
Використання XML включення відключення курсору
android:cursorVisible="false/true"
android:focusable="false/true"
Зробити edit_text Вибір до (скопіювати / вирізати / вставити / вибрати / вибрати все)
editText.setTextIsSelectable(true);
Щоб зосередитись на сенсорному режимі, напишіть наступні рядки в XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
програмно
editText.requestFocusFromTouch();
Щоб очистити фокус на сенсорному режимі
editText.clearFocus()
Проблема з встановленням видимості курсора на true та false може бути проблемою, оскільки він видаляє курсор, поки ви знову не встановите його знову, і в той же час поле редагується, що не є хорошим досвідом користувача.
тому замість використання
setCursorVisible(false)
просто зроби це так
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
Вищевказаний код видаляє фокус, який, у свою чергу, видаляє курсор. І вмикає його знову, щоб ви могли знову торкнутися його та мати змогу редагувати. Так само, як і звичайний досвід користувача.
У моєму випадку я хотів увімкнути / відключити курсор, коли редагування зосереджено.
У вашій діяльності:
@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);
таким, щоб курсор був видно, коли клавіатура присутня.
просто додайте цей рядок у батьківський макет
<?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>
Якщо ви хочете , щоб ігнорувати Edittext
від початкової активності, android:focusable
і android:focusableInTouchMode
допоможете іншаллах.
<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">
Це
LinearLayout
з вашимEdittext
.
Змініть фокус на інший вигляд (наприклад, будь-який перегляд тексту або лінійний розміщення в XML), використовуючи
android:focusableInTouchMode="true"
android:focusable="true"
встановіть addTextChangedListener для редагуваннятексту в діяльності.
а потім на післязаміненому редагуванні встановити Edittext edittext.clearFocus()
;
Це дозволить курсору, коли клавіатура відкрито, і відключити, коли клавіатура закрита.
У kotlin your_edittext.isCursorVisible = false