Alguém sabe como desativar o cursor piscando em uma EditText
exibição?
Alguém sabe como desativar o cursor piscando em uma EditText
exibição?
Respostas:
Você pode usar o atributo xml android:cursorVisible="false"
ou a função java setCursorVisible(false)
.
Solução perfeita que vai além do objetivo
Objetivo: desative o cursor piscante quando EditText
não estiver em foco e ative o cursor piscante quando EditText
estiver em foco. Abaixo também abre o teclado quando você EditText
clica e o oculta quando você pressiona o botão concluído.
1) Defina no seu xml sob o seu EditText
:
android:cursorVisible="false"
2) Defina onClickListener:
iEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener()
{
public void onClick(View v)
{
if (v.getId() == iEditText.getId())
{
iEditText.setCursorVisible(true);
}
}
};
3) onCreate
captura o evento quando concluído e pressiona usando OnEditorActionListener
para EditText
, e então 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;
}
});
Você pode usar o código a seguir para ativar e desativar o cursor de edição de texto programaticamente.
Para ativar o cursor
editText.requestFocus();
editText.setCursorVisible(true);
Para desativar o cursor
editText.setCursorVisible(false);
Usando o XML ativar o cursor de desativação
android:cursorVisible="false/true"
android:focusable="false/true"
Para tornar edit_text Selecionável para (copiar / recortar / colar / selecionar / selecionar tudo)
editText.setTextIsSelectable(true);
Para se concentrar no modo de toque, escreva as seguintes linhas em XML
android:focusableInTouchMode="true"
android:clickable="true"
android:focusable="true"
programaticamente
editText.requestFocusFromTouch();
Para limpar o foco no modo de toque
editText.clearFocus()
O problema com a configuração da visibilidade do cursor como true e false pode ser um problema, pois ele remove o cursor até que você o defina novamente e ao mesmo tempo o campo seja editável, o que não é uma boa experiência do usuário.
então ao invés de usar
setCursorVisible(false)
apenas faça assim
editText2.setFocusableInTouchMode(false)
editText2.clearFocus()
editText2.setFocusableInTouchMode(true)
O código acima remove o foco que, por sua vez, remove o cursor. E habilita-o novamente para que você possa tocá-lo novamente e poder editá-lo. Assim como a experiência normal do usuário.
No meu caso, eu queria ativar / desativar o cursor quando a edição estiver focada.
Na sua atividade:
@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);
}
edit.setCursorVisible(!isKeyboardOpen);
estar edit.setCursorVisible(isKeyboardOpen);
para que o cursor fique visível quando o teclado estiver presente.
simples adicione esta linha ao seu layout pai
<?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>
Se você deseja ignorar a Edittext
partir do início da atividade, android:focusable
e android:focusableInTouchMode
irá ajudá-lo a inshallah.
<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">
Isso
LinearLayout
com o seuEdittext
.
Altere o foco para outra visualização (por exemplo: qualquer visualização de texto ou layout linear no XML) usando
android:focusableInTouchMode="true"
android:focusable="true"
defina addTextChangedListener como edittext em Activity.
e depois em aftertextchanged de Edittext put edittext.clearFocus()
;
Isso ativará o cursor quando o teclado estiver aberto e será desativado quando o teclado estiver fechado.
No kotlin, your_edittext.isCursorVisible = false