禁用EditText闪烁光标

时间:2011-04-07 14:27:30

标签: android android-edittext

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

11 个答案:

答案 0 :(得分:325)

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

答案 1 :(得分:28)

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

目标:当EditText未对焦时禁用闪烁光标,并在EditText处于焦点时启用闪烁光标。下面还会在单击EditText时打开键盘,并在键盘上按完后隐藏键盘。

1)在EditText

下的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,使用OnEditorActionListenerEditText,然后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:focusableandroid: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)

  1. 使用

    将焦点更改到另一个视图(例如:XML中的任何textview或Linearlayout)
    android:focusableInTouchMode="true"
    android:focusable="true"
    
  2. 将addTextChangedListener设置为Activity中的edittext。

  3. ,然后在对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();