禁用EditText闪烁光标

Kev*_*ker 169 android android-edittext

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

Vic*_*Vic 338

您可以使用xml属性android:cursorVisible="false"或java函数setCursorVisible(false).

  • 太棒了,这与onclicklistener一起使其可见,给出了正确的行为:) (12认同)
  • 是否可以仅禁用闪烁本身,而不是光标? (9认同)

coo*_*994 33

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

目标:当EditText焦点不清晰时禁用闪烁光标,并在焦点对准时启用闪烁光标EditText.EditText单击下方时也会打开键盘,并在键盘上按完后隐藏键盘.

1)在您的xml下设置EditText:

android:cursorVisible="false"
Run Code Online (Sandbox Code Playgroud)

2)设置onClickListener:

iEditText.setOnClickListener(editTextClickListener);

OnClickListener editTextClickListener = new OnClickListener() 

{

    public void onClick(View v) 
    {
         if (v.getId() == iEditText.getId()) 
        {
            iEditText.setCursorVisible(true);
        }

    }
};
Run Code Online (Sandbox Code Playgroud)

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;
            }
        });
Run Code Online (Sandbox Code Playgroud)

  • KeyEvent.KEYCODE_ENTER不适用于所有键盘.你需要在布局中特别提到android:imeOptions ="actionDone",然后再处理EditorInfo.IME_ACTION_DONE. (6认同)

Sag*_*gar 7

您可以使用以下代码通过编程来启用和禁用编辑文本光标。

启用光标

    editText.requestFocus();
    editText.setCursorVisible(true);
Run Code Online (Sandbox Code Playgroud)

禁用光标

    editText.setCursorVisible(false);
Run Code Online (Sandbox Code Playgroud)

使用XML启用禁用游标

   android:cursorVisible="false/true"
   android:focusable="false/true"
Run Code Online (Sandbox Code Playgroud)

使edit_text可以选择(复制/剪切/粘贴/选择/全选)

   editText.setTextIsSelectable(true);
Run Code Online (Sandbox Code Playgroud)

要专注于触摸模式,请在XML中编写以下几行

  android:focusableInTouchMode="true"
  android:clickable="true"
  android:focusable="true" 
Run Code Online (Sandbox Code Playgroud)

以编程方式

  editText.requestFocusFromTouch();
Run Code Online (Sandbox Code Playgroud)

清除对触摸模式的关注

  editText.clearFocus()
Run Code Online (Sandbox Code Playgroud)


Nul*_*ion 6

简单地将这一行添加到您的父布局中

<?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>
Run Code Online (Sandbox Code Playgroud)


vik*_*mar 5

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

所以而不是使用

setCursorVisible(false)
Run Code Online (Sandbox Code Playgroud)

就这样做

        editText2.setFocusableInTouchMode(false)
        editText2.clearFocus()
        editText2.setFocusableInTouchMode(true)
Run Code Online (Sandbox Code Playgroud)

上面的代码删除了焦点,进而删除了光标。并再次启用它,以便您可以再次触摸它并能够编辑它。就像正常的用户体验一样。