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


当前回答

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

目标:当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;
            }
        });

其他回答

在根布局中添加android:focusableInTouchMode="true",当编辑文本被点击时,光标会显示出来。

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

所以不用

setCursorVisible(false)

就像这样做

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

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

如果你想忽略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。

您可以使用以下代码以编程方式启用和禁用编辑文本游标。

启用游标

    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()

简单地添加这一行到你的父布局

<?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>