有人知道如何禁用EditText视图中的闪烁光标吗?


当前回答

你可以使用xml属性android:cursorVisible="false"或通过编程方式:

java: view.setCursorVisible(假) 芬兰湾的科特林:视图。isCursorVisible = 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()

在我的例子中,我想在编辑聚焦时启用/禁用游标。

在活动中:

@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从开始的活动,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:cursorVisible="false"或通过编程方式:

java: view.setCursorVisible(假) 芬兰湾的科特林:视图。isCursorVisible = false

将游标可见性设置为true和false的问题可能是一个问题,因为它会删除游标,直到您再次设置它,同时字段是可编辑的,这不是很好的用户体验。

所以不用

setCursorVisible(false)

就像这样做

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)

上面的代码删除焦点,进而删除游标。并再次启用它,这样你就可以再次触摸它并编辑它。就像普通的用户体验一样。