Como vibrar ao digitar, mas não ao pressionar a tecla backspace
-
21-12-2019 - |
Pergunta
Eu tenho o seguinte código:
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
data = (ArrayList<SetRows>)results.values;
EditText etS = (EditText) ((Activity)context).findViewById(R.id.etSearch);
if (data.isEmpty()) {
etS.setTextColor(Color.parseColor("#FFCC0000"));
Vibrator vb = (Vibrator) ((Activity)context).getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 100 milliseconds
vb.vibrate(100);
}
if (!data.isEmpty()) {
etS.setTextColor(Color.parseColor("#FF27497B"));
}
notifyDataSetChanged();
clear();
for(int i = 0, l = data.size(); i < l; i++)
add(data.get(i));
notifyDataSetInvalidated();
}
Ele vibra toda vez que insiro um caractere que não corresponde a nada no ListView
e está funcionando bem.O problema é que ele também vibra quando pressiono a tecla backspace/delete.Qual não é a intenção.
Como faço para permitir a vibração ao inserir a letra errada, mas não ao pressionar a tecla backspace/del.Eu tentei o onTextChanged
mas isso não estava funcionando.
Solução
Eu manteria o comprimento do texto inserido.Ao pressionar backspace/delete, você basicamente apaga o último caractere (o comprimento está diminuindo), então compare o novo comprimento com o antigo.Pseudo-código:
if newLength > oldLength then vibrate
else don't vibrate
Se newLength for mais curto, significa que você pressionou a tecla backspace/delete e excluiu um caractere, portanto não vibre.Você pode fazer isso em onTextChanged ou onde fizer sentido para você.