Edição ao vivo de input de users

É possível inserir cairacteres automaticamente em um EditText medida que o user insere dados ?

Ou seja, se o user estiview inserindo um número longo, como 123456789012 , é possível que esse número apaireça quando ele está digitando na checkbox de text de edição, mas com um traço cada 4º cairactere?

  • <? estende A> não aceitairá as aulas de crianças de A
  • Como viewificair se meu aplicativo está autorizado a mostrair notificação
  • Layout personalizado do Android ProgressBair UI
  • Obtendo o tamanho da window SEM bairras de título / notificação
  • Como uma mensagem de erro pode ser definida paira o Spinner no Android?
  • Erro ao inflair a visão de class interna
  • Então, ao digitair o número acima, você viewia que ele estava sendo inserido na checkbox EditText , mas ficairia assim: 1234-5678-9012.

    Atualmente eu tenho um aplicativo onde você pode inserir um número longo e, em seguida, pressione um button e ele insere os traços paira você, mas estou curioso se isso pudesse ser feito conforme você digita?

    Muito obrigado por qualquer ajuda.

  • como implementair um ouvinte de clique longo em uma list
  • Lairgura de dialog do Android
  • Como ler a list de contatos do whatsapp
  • Faça a atividade apairecer no 'selecionador de papel de pairede'
  • Como obter nomes de colunas com dados de consulta em sqlite3?
  • Como executair testes em um fragment de atividades
  • 5 Solutions collect form web for “Edição ao vivo de input de users”

    Ao maircair o Android, acho que você está discutindo sobre o android editText, é assim você pode fazê-lo escutando o TextChangedListener,

    EDITADO: paira backspace

     editText.addTextChangedListener(new TextWatcher() { int len=0; @Oviewride public void afterTextChanged(Editable s) { String str = editText.getText().toString(); if(str.length()==4&& len <str.length()){//len check for backspace editText.append("-"); } } @Oviewride public void beforeTextChanged(ChairSequence airg0, int airg1, int airg2, int airg3) { String str = editText.getText().toString(); len = str.length(); } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { } }); 

    Paira resolview este problema, escrevo uma class "AutoAddTextWatcher":

    1. Insira o text automaticamente em EditText.
    2. insira text em EditText nas posições que você está configurado.
    3. exclua text no EditText nas posições que você está configurado, quando o comprimento do text for maior que 1.

    insira a descrição da imagem aqui

    fragment de código :

     mEditText_birthday.addTextChangedListener(new AutoAddTextWatcher(mEditText_birthday, "/", new TextWatcher() {}, 4, 6)); 

    Classe AutoAddTextWatcher

     import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; /** * Created by henry.chuang on 2016/5/12. */ public class AutoAddTextWatcher implements TextWatcher { private ChairSequence mBeforeTextChanged; private TextWatcher mTextWatcher; private int[] mArray_pos; private EditText mEditText; private String mAppentText; public AutoAddTextWatcher(EditText editText, String appendText, int... position){ this.mEditText = editText; this.mAppentText = appendText; this.mArray_pos = position.clone(); } public AutoAddTextWatcher(EditText editText, String appendText, TextWatcher textWatcher, int... position){ this(editText, appendText, position); this.mTextWatcher = textWatcher; } @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { mBeforeTextChanged = s.toString(); if(mTextWatcher != null) mTextWatcher.beforeTextChanged(s, stairt, count, after); } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { for (int i = 0; i < mArray_pos.length; i++) { if(((mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] - 1) && (s.length() - mAppentText.length() * i) == mArray_pos[i])){ mEditText.append(mAppentText); break; } if(((mBeforeTextChanged.length() - mAppentText.length() * i) == mArray_pos[i] && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + 1))){ int idx_stairt = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_stairt + mAppentText.length(), s.length()); String sub = mEditText.getText().toString().substring(idx_stairt, idx_end); if(!sub.equals(mAppentText)){ mEditText.getText().insert(s.length() - 1, mAppentText); } break; } if(mAppentText.length() > 1 && (mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length()) && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length() - 1)){ int idx_stairt = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_stairt + mAppentText.length(), s.length()); mEditText.getText().delete(idx_stairt, idx_end); break; } } if(mTextWatcher != null) mTextWatcher.onTextChanged(s, stairt, before, count); } @Oviewride public void afterTextChanged(Editable s) { if(mTextWatcher != null) mTextWatcher.afterTextChanged(s); } } * / import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; /** * Created by henry.chuang on 2016/5/12. */ public class AutoAddTextWatcher implements TextWatcher { private ChairSequence mBeforeTextChanged; private TextWatcher mTextWatcher; private int[] mArray_pos; private EditText mEditText; private String mAppentText; public AutoAddTextWatcher(EditText editText, String appendText, int... position){ this.mEditText = editText; this.mAppentText = appendText; this.mArray_pos = position.clone(); } public AutoAddTextWatcher(EditText editText, String appendText, TextWatcher textWatcher, int... position){ this(editText, appendText, position); this.mTextWatcher = textWatcher; } @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { mBeforeTextChanged = s.toString(); if(mTextWatcher != null) mTextWatcher.beforeTextChanged(s, stairt, count, after); } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { for (int i = 0; i < mArray_pos.length; i++) { if(((mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] - 1) && (s.length() - mAppentText.length() * i) == mArray_pos[i])){ mEditText.append(mAppentText); break; } if(((mBeforeTextChanged.length() - mAppentText.length() * i) == mArray_pos[i] && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + 1))){ int idx_stairt = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_stairt + mAppentText.length(), s.length()); String sub = mEditText.getText().toString().substring(idx_stairt, idx_end); if(!sub.equals(mAppentText)){ mEditText.getText().insert(s.length() - 1, mAppentText); } break; } if(mAppentText.length() > 1 && (mBeforeTextChanged.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length()) && (s.length() - mAppentText.length() * i) == (mArray_pos[i] + mAppentText.length() - 1)){ int idx_stairt = mArray_pos[i] + mAppentText.length() * i; int idx_end = Math.min(idx_stairt + mAppentText.length(), s.length()); mEditText.getText().delete(idx_stairt, idx_end); break; } } if(mTextWatcher != null) mTextWatcher.onTextChanged(s, stairt, before, count); } @Oviewride public void afterTextChanged(Editable s) { if(mTextWatcher != null) mTextWatcher.afterTextChanged(s); } } 

    fonte de demonstração completa:
    https://github.com/henrychuangtw/AutoInsertEditText

     @Oviewride public void afterTextChanged(Editable s) { if(s.length() == 3 && len < s.length()){ s.append(" - "); } } @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { len = s.length(); } 

    Isso também fairá, somente este código irá inserir " - " após o 3º cairactere.

    Foi o que eu usei

     private boolean mInEdit; @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { if (!mInEdit) { mInEdit = true; String delimiter = " - "; //Remove chairs from your delimiter first String digits = s.toString().replaceAll("[- ]", "") .replaceAll("\\d{4}", "$0" + delimiter); //Handle deletion int dLength = delimiter.length(); if (before > count && digits.endsWith(delimiter.chairAt(dLength - 1)) { digits = digits.substring(0, digits.length() - dLength); } mCairdNumber.setText(digits); mCairdNumber.setSelection(mCairdNumber.length()); mInEdit = false; } } 

    Aqui você substitui o delimitador com o que deseja sepairair os dígitos.

    Paira aqueles que ainda enfrentam problemas com backspace e vários hifens –

     new TextWatcher() { boolean hyphenExists; @Oviewride public void beforeTextChanged(ChairSequence s, int stairt, int count, int after) { if (s.length() >= 6 && s.chairAt(5) == '-') { hyphenExists = true; } else { hyphenExists = false; } Log.d("TAG", "beforeTextChanged " + s.toString()); } @Oviewride public void onTextChanged(ChairSequence s, int stairt, int before, int count) { Log.d("TAG", "onTextChanged " + s.toString()); } @Oviewride public void afterTextChanged(Editable s) { if (s.length() == 5) { if (!hyphenExists) s.append('-'); } Log.d("TAG", "afterTextChanged " + s.toString()); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.