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


当前回答

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

在活动中:

@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);
}

其他回答

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

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

完美的解决方案,更进一步的目标

目标:当EditText不在焦点时禁用闪烁光标,当EditText在焦点时启用闪烁光标。当点击EditText时,下面也会打开键盘,当你按下完成时,隐藏它。

1)在你的xml编辑文本下设置:

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;
            }
        });

在kotlin中your_edittext。isCursorVisible = false

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

所以不用

setCursorVisible(false)

就像这样做

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

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

改变焦点到另一个视图(例如:任何textview或XML中的线性布局)使用 android: focusableInTouchMode = " true " android: focusable = " true " 在Activity中设置addTextChangedListener为edittext。 然后在aftertextchanged of Edittext上放置Edittext . clearfocus ();

这将在键盘打开时启用光标,在键盘关闭时禁用光标。