有人知道如何在EditText
视图中禁用闪烁的光标吗?
答案 0 :(得分:325)
您可以使用xml属性android:cursorVisible="false"
或java函数setCursorVisible(false)
。
答案 1 :(得分:28)
进一步实现目标的完美解决方案
目标:当EditText
未对焦时禁用闪烁光标,并在EditText
处于焦点时启用闪烁光标。下面还会在单击EditText
时打开键盘,并在键盘上按完后隐藏键盘。
1)在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;
}
});
答案 2 :(得分:5)
您可以使用以下代码以编程方式启用和禁用编辑文本光标。
启用光标
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()
答案 3 :(得分:1)
在我的情况下,我想在编辑聚焦时启用/禁用光标。
在您的活动中:
@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);
}
答案 4 :(得分:0)
如果您想在活动开始时忽略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
。
答案 5 :(得分:0)
使用
将焦点更改到另一个视图(例如:XML中的任何textview或Linearlayout)android:focusableInTouchMode="true"
android:focusable="true"
将addTextChangedListener设置为Activity中的edittext。
,然后在对Edittext进行文本更改后,放edittext.clearFocus()
;
这将在打开键盘时启用光标,而在关闭键盘时禁用光标。
答案 6 :(得分:0)
简单地将此行添加到您的父级布局
<?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>
答案 7 :(得分:0)
将光标的可见性设置为true和false可能是一个问题,因为它将删除光标,直到您再次对其进行设置,并且同时可编辑字段,这不是很好的用户体验。
所以不要使用
setCursorVisible(false)
只是这样做
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
上面的代码删除了焦点,这又删除了光标。并再次启用它,以便您可以再次触摸它并进行编辑。就像普通的用户体验一样。
答案 8 :(得分:0)
在Kotlin中,your_edittext.isCursorVisible = false
答案 9 :(得分:0)
在根布局中添加android:focusableInTouchMode="true",点击编辑文本时会显示光标。
答案 10 :(得分:-1)
rootLayout.findFocus()。clearFocus();