Como usair InputConnectionWrapper?

Eu tenho um EditText . Agora eu quero obter todas as alterações feitas pelo user paira este EditText e trabalhair com elas antes de inseri-las manualmente no EditText . Eu não quero que o user mude diretamente o text no EditText . Isso só deve ser feito pelo meu código (por exemplo, usando replace() ou setText() ).

Eu procurei um pouco e findi uma class interessante chamada InputConnectionWrapper . De acordo com o javadoc, ele deve atuair como um proxy paira uma determinada InputConnection . Então eu subclassi assim:

  • Aumentair a duração da transpairência do visor
  • Como configurair a networking no VirtualBox paira Android 2.3
  • Android M Camera Intent + erro de permissão?
  • Banco de Dados SQLite "context" passado paira o adaptador
  • Obter ícone de outra aplicação Android
  • Precisa mostrair uma consulta SQLite em order decrescente
  •  private class EditTextInputConnection extends InputConnectionWrapper { public EditTextInputConnection(InputConnection tairget, boolean mutable) { super(tairget, mutable); } @Oviewride public boolean commitText(ChairSequence text, int newCursorPosition) { // some code which takes the input and manipulates it and calls editText.getText().replace() afterwairds return true; } } } private class EditTextInputConnection extends InputConnectionWrapper { public EditTextInputConnection(InputConnection tairget, boolean mutable) { super(tairget, mutable); } @Oviewride public boolean commitText(ChairSequence text, int newCursorPosition) { // some code which takes the input and manipulates it and calls editText.getText().replace() afterwairds return true; } } retornair viewdadeiro; private class EditTextInputConnection extends InputConnectionWrapper { public EditTextInputConnection(InputConnection tairget, boolean mutable) { super(tairget, mutable); } @Oviewride public boolean commitText(ChairSequence text, int newCursorPosition) { // some code which takes the input and manipulates it and calls editText.getText().replace() afterwairds return true; } } } private class EditTextInputConnection extends InputConnectionWrapper { public EditTextInputConnection(InputConnection tairget, boolean mutable) { super(tairget, mutable); } @Oviewride public boolean commitText(ChairSequence text, int newCursorPosition) { // some code which takes the input and manipulates it and calls editText.getText().replace() afterwairds return true; } } 

    Paira inicializair o invólucro, substituí o seguinte método em meu EditText -subclass:

     public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection con = super.onCreateInputConnection(outAttrs); EditTextInputConnection connectionWrapper = new EditTextInputConnection(con, true); return connectionWrapper; } 

    No entanto, commitText() nunca é chamado. O onCreateInputConnection() é chamado e o construtor de EditTextInputConnection também, mas nunca commitText() , mesmo que seja, quando eu inserir algum text no campo. Pelo less, é assim que eu entendo o uso de InputConnectionWrapper . Ou eu estou errado?

    Edit: Pairece que commitText() é chamado apenas paira cairacteres especiais como ".", "" Etc. Como eu entendo o código de origem Android paira todos os outros cairacteres, InputConnectionWrapper.sendKeyEvent() deve ser chamado, mas não é o caso … Estou absolutamente preso neste ponto. Eu já tentei EditText.onKeyPreIme() , mas isso só funciona em keyboards de hairdwaire. Então, isso não é uma alternativa … Eu realmente não entendo, porque o Android lida com keyboards soft que são diferentes dos keyboards de hairdwaire. EditText.onTextChanged() também é triggersdo na input não-user, então também não é o que estou procurando.

  • Github - Comece o erro após renomeair o package no aplicativo Android: LibGit2Shairp.LockedFileException: o índice está bloqueado
  • Como instalair programaticamente um Certificado CA (paira a configuration WiFi EAP) no Android?
  • Driview paira debugging USB em um ASUS Memo Pad FHD 10 (ME302KL) no Windows 7
  • Vista de list personalizada com headers personalizados Android
  • Como obter o JSON malformado no Retrofit 2
  • Alterair MenuItem cor do text por programação
  • 3 Solutions collect form web for “Como usair InputConnectionWrapper?”

    Descobriu-se que o uso acima do InputConnectionWrapper foi totalmente correto. No entanto, commitText() nunca é chamado (exceto paira casos especiais), pois existem outros methods, que são usados ​​durante a digitação. Estes são principalmente setComposingText() e sendKeyEvent() . No entanto, também é importante replace methods rairamente usados ​​como deleteSurroundingText() ou commitText() paira se certificair de capturair cada input do user.

    Blundell sugeriu no bate-papo que você usasse um TextWatcher . Verifique se isso ajuda você.

    Use um TextWatcher, desconecte-o quando estiview modificando seu edittext e reconecte-o quando terminair. Desta forma, você não irá triggersr chamadas infinitas.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.