Как удалить фокус из EditText, когда пользователь закончил редактирование?

У меня есть один EditText на моем макете. После ввода пользователем какого-либо текста и нажатия клавиши "done" я хотел бы удалить мигающий курсор из него. Я просмотрел StackOverflow и нашел 3 ответа, которые не работали для меня. Мигающий курсор все еще остается.

private class MyOnKeyListener implements OnKeyListener {
  public boolean onKey(View v, int keyCode, KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_DOWN
    && keyCode == KeyEvent.KEYCODE_ENTER) {
      // FAIL 0
      MyActivity.this.findViewById(R.id.someOtherView).requestFocus();

      // FAIL 1
      InputMethodManager imm = (InputMethodManager)getSystemService(
        Context.INPUT_METHOD_SERVICE
      );
      imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

      // FAIL 2
      MyActivity.this.getWindow().setSoftInputMode(
        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
      );

      return true;
    } else {
      return false;
    }
  }
}

Ответы

Ответ 1

Вы можете использовать атрибут xml,

android:cursorVisible 

или вы можете сделать это в коде с помощью этого метода.

 setCursorVisible(boolean).

Ответ 2

Используйте приведенный ниже код для удаления фокуса с помощью EditText

editText.setOnKeyListener(new OnKeyListener() {
            public boolean onKey(View view, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
                    imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); 
                    editText.setFocusable(false);
                    editText.setFocusableInTouchMode(true);
                    return true;
                } else {
                    return false;
                }
            }
        });

Ответ 3

Вот мой пользовательский EditText, который обнаруживает, показывает ли клавиатура и автоматически удаляет фокус, когда клавиатура скрыта.

/**
 * Created by TheFinestArtist on 9/24/15.
 */
public class KeyboardEditText extends EditText {

    public KeyboardEditText(Context context) {
        super(context);
    }

    public KeyboardEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public KeyboardEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public void setOnTouchListener(OnTouchListener l) {
        super.setOnTouchListener(l);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
        if (listener != null)
            listener.onStateChanged(this, true);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, @NonNull KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK
                && event.getAction() == KeyEvent.ACTION_UP) {
            if (listener != null)
                listener.onStateChanged(this, false);

            // Hide cursor
            setFocusable(false);

            // Set EditText to be focusable again
            setFocusable(true);
            setFocusableInTouchMode(true);
        }
        return super.onKeyPreIme(keyCode, event);
    }

    /**
     * Keyboard Listener
     */
    KeyboardListener listener;

    public void setOnKeyboardListener(KeyboardListener listener) {
        this.listener = listener;
    }

    public interface KeyboardListener {
        void onStateChanged(KeyboardEditText keyboardEditText, boolean showing);
    }
}

Ответ 4

Ошибка 0:

Вызов. requestFocus() для некоторого элемента макета недостаточно, если элемент не фокусируется в сенсорном режиме. Если вы хотите установить фокус на вид или кнопку, вы должны вызвать

.setFocusableInTouchMode(true);

сначала или установите его в свой .xml

Ответ 5

просто установите фокус на кнопку "Готово".

Ответ 6

если вы не хотите, чтобы он редактировался вообще, я бы сказал, сделайте следующее:

EditText orgid; 
orgid.setText(user.getOrgId());
orgid.setEnabled(false);