有人知道如何禁用EditText视图中的闪烁光标吗?
EditText
可以使用xml属性android:cursorVisible="false",也可以通过编程方式使用:
android:cursorVisible="false"
view.setCursorVisible(false)
view.isCursorVisible = false
完美的解决方案,更进一步的目标
目标:当EditText不在焦点时禁用闪烁光标,当EditText在焦点时启用闪烁光标。下面也会在点击EditText时打开键盘,并在键盘上按done时隐藏它。
1)在你的xml中EditText下设置:
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
OnEditorActionListener
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; } });
在我的例子中,我想在编辑聚焦时启用/禁用游标。
在活动中:
@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); }
您可以使用以下代码以编程方式启用和禁用编辑文本游标。
启用游标
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()
如果你想忽略活动开始时的Edittext, android:focusable和android:focusableInTouchMode会帮助你。
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。
LinearLayout
android:focusableInTouchMode="true" android:focusable="true"
set addTextChangedListener to edittext in Activity.
and then on aftertextchanged of Edittext put edittext.clearFocus();
edittext.clearFocus()
This will enable the cursor when keyboard is open and disable when keyboard is closed.
简单地添加这一行到你的父布局
<?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>
将游标可见性设置为true和false的问题可能是一个问题,因为它会删除游标,直到您再次设置它,同时字段是可编辑的,这不是很好的用户体验。
所以不用
就像这样做
editText2.setFocusableInTouchMode(false) editText2.clearFocus() editText2.setFocusableInTouchMode(true)
上面的代码删除焦点,进而删除游标。并再次启用它,这样你就可以再次触摸它并编辑它。就像普通的用户体验一样。
在kotlin中your_edittext。isCursorVisible = false
.clearFocus rootLayout.findFocus () ();
添加android: focusableInTouchMode =“true"在根布局中,当编辑文本将被单击时,光标将被显示。