texto teclado samsung quitar predictivo p20 ortografico moto desactivar corrector autocorrector autocompletar activar android android-edittext android-softkeyboard textwatcher android-textwatcher

samsung - teclado corrector ortografico android



TextWatcher onTextChanged no funciona con el teclado automático de autocompletar/palabras sugeridas (1)

Es mejor optar por el método afterTextChanged.
En la siguiente muestra, el texto ingresado se recupera y maneja usando un controlador para el proceso posterior

EditText text1; StringBuffer previousChar=new StringBuffer(); @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); text1=(EditText)findViewById(R.id.editText); text1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { if(!previousChar.toString().equals(s.toString())){ Message msg=new Message(); msg.obj=s.toString(); localHandler.sendMessage(msg); previousChar=new StringBuffer(s.toString()); Log.i("TAG", "TextEntered = "+s); } } });}

Y en el controlador

private Handler localHandler = new Handler(){ public void handleMessage(Message msg) { super.handleMessage(msg); String value=(String)msg.obj; //Your logic with the text entered that is retrieved } };

Estoy implementando un TextWatcher en un EditText para buscar y subrayar una serie de palabras clave dentro del texto cada vez que el usuario ingresa un nuevo carácter. Sin embargo, cuando se selecciona una palabra sugerida / autocompletar en el teclado virtual, en lugar de agregar la palabra sugerida a Edittext y luego llamar a la función onTextChanged, se elimina la mitad de la palabra completa. Lo encontré bastante extraño ya que ingresar caracteres individuales activa la función onTextChanged muy bien. Cualquier ayuda sería muy apreciada.

PD. si alguien conoce una mejor manera de procesar un EditText sobre la marcha por favor hágamelo saber.

Código:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_codify_test); final EditText editText = (EditText) findViewById(R.id.editText_codifyTest); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (!checked) { //stop infinite loop checked = true; cursorPosition = editText.getSelectionStart(); //get cursor position before text modification codifyText(editText); } else { checked = false; } } @Override public void afterTextChanged(Editable s) { } }); } //Find and underline keywords private void codifyText(EditText editText) { String plainText = editText.getText().toString() + " "; int prevWhiteSpace = 0; final Context context = this; SpannableString codifiedText = new SpannableString(plainText.substring(0, plainText.length() - 1)); if (codifiedText.length() == 0) return; for (int i = 0; i < plainText.length(); i ++){ if (Character.isWhitespace(plainText.charAt(i))){ String currWord = plainText.substring(prevWhiteSpace, i); if (isKeyWordInDataBase(currWord)) { ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View view) { } }; codifiedText.setSpan(clickableSpan, prevWhiteSpace, i, 0); } prevWhiteSpace = i + 1; } } editText.setMovementMethod(LinkMovementMethod.getInstance()); editText.setText(codifiedText, TextView.BufferType.SPANNABLE); editText.setSelection(cursorPosition); //set cursor to position prior to edit }