Disable EditText blinking cursor

AndroidAndroid Edittext

Android Problem Overview


Does anyone know how to disable the blinking cursor in an EditText view?

Android Solutions


Solution 1 - Android

You can use either the xml attribute android:cursorVisible="false" or programatically:

  • java: view.setCursorVisible(false)
  • kotlin: view.isCursorVisible = false

Solution 2 - Android

Perfect Solution that goes further to the goal

Goal: Disable the blinking curser when EditText is not in focus, and enable the blinking curser when EditText is in focus. Below also opens keyboard when EditText is clicked, and hides it when you press done in the keyboard.

  1. Set in your xml under your EditText:

    android:cursorVisible="false"

  2. Set onClickListener:

    iEditText.setOnClickListener(editTextClickListener);

    OnClickListener editTextClickListener = new OnClickListener()

    {

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

    };

  3. then onCreate, capture the event when done is pressed using OnEditorActionListener to your EditText, and then 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;
     		}
         });
    

Solution 3 - Android

You can use following code for enabling and disabling edit text cursor by programmatically.

> To Enable cursor

    editText.requestFocus();
    editText.setCursorVisible(true);

> To Disable cursor

    editText.setCursorVisible(false);

> Using XML enable disable cursor

   android:cursorVisible="false/true"
   android:focusable="false/true"

> To make edit_text Selectable to (copy/cut/paste/select/select all)

   editText.setTextIsSelectable(true);

> To focus on touch mode write following lines in XML

  android:focusableInTouchMode="true"
  android:clickable="true"
  android:focusable="true" 

> programmatically

  editText.requestFocusFromTouch();

> To clear focus on touch mode

  editText.clearFocus()

Solution 4 - Android

simple add this line into your parent layout

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

Solution 5 - Android

The problem with setting cursor visibility to true and false may be a problem since it removes the cursor until you again set it again and at the same time field is editable which is not good user experience.

so instead of using

setCursorVisible(false)

just do it like this

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

The above code removes the focus which in turn removes the cursor. And enables it again so that you can again touch it and able to edit it. Just like normal user experience.

Solution 6 - Android

In my case, I wanted to enable/disable the cursor when the edit is focused.

In your Activity:

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

Solution 7 - Android

If you want to ignore the Edittext from the starting of activity, android:focusable and android:focusableInTouchMode will help you.

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

> This LinearLayout with your Edittext.

Solution 8 - Android

add android:focusableInTouchMode="true" in root layout, when edit text will be clicked at that time cursor will be shown.

Solution 9 - Android

  1. Change focus to another view (ex: Any textview or Linearlayout in the XML) using

     android:focusableInTouchMode="true"
     android:focusable="true"
    
  2. set addTextChangedListener to edittext in Activity.

  3. and then on aftertextchanged of Edittext put edittext.clearFocus();

This will enable the cursor when keyboard is open and disable when keyboard is closed.

Solution 10 - Android

In kotlin your_edittext.isCursorVisible = false

Solution 11 - Android

rootLayout.findFocus().clearFocus();

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKevin ParkerView Question on Stackoverflow
Solution 1 - AndroidVicView Answer on Stackoverflow
Solution 2 - Androidcoolcool1994View Answer on Stackoverflow
Solution 3 - AndroidSagarView Answer on Stackoverflow
Solution 4 - AndroidNull Pointer ExceptionView Answer on Stackoverflow
Solution 5 - Androidvikas kumarView Answer on Stackoverflow
Solution 6 - AndroidMontiRabbitView Answer on Stackoverflow
Solution 7 - AndroidSajid khanView Answer on Stackoverflow
Solution 8 - AndroidRohan TalukderView Answer on Stackoverflow
Solution 9 - AndroidBhavani PKView Answer on Stackoverflow
Solution 10 - AndroidRohit RohitView Answer on Stackoverflow
Solution 11 - AndroidPratik LahotiView Answer on Stackoverflow