Ответ 1
Вы можете использовать атрибут xml,
android:cursorVisible
или вы можете сделать это в коде с помощью этого метода.
setCursorVisible(boolean).
У меня есть один 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;
}
}
}
Вы можете использовать атрибут xml,
android:cursorVisible
или вы можете сделать это в коде с помощью этого метода.
setCursorVisible(boolean).
Используйте приведенный ниже код для удаления фокуса с помощью 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;
}
}
});
Вот мой пользовательский 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);
}
}
Ошибка 0:
Вызов. requestFocus() для некоторого элемента макета недостаточно, если элемент не фокусируется в сенсорном режиме. Если вы хотите установить фокус на вид или кнопку, вы должны вызвать
.setFocusableInTouchMode(true);
сначала или установите его в свой .xml
просто установите фокус на кнопку "Готово".
если вы не хотите, чтобы он редактировался вообще, я бы сказал, сделайте следующее:
EditText orgid;
orgid.setText(user.getOrgId());
orgid.setEnabled(false);