2014-12-21 19 views
5

Ogni volta che il metodo Editaxt suAfterTextChange, viene controllato se viene inserita una stringa speciale (che deriva dalla variabile della funzione), quindi cambia il colore speciale della stringa. Il codice è inferiore aAndroid Edittext Numero estensibile

for(String s:functionList) 
    { 
     final Pattern p = Pattern.compile(s); 
     final Matcher matcher = p.matcher(inputStr); 

     while(matcher.find()) 
     { 
      //if(matcher.end() - matcher.start()== s.length()) 
      inputStr.setSpan(new ForegroundColorSpan(Color.parseColor(highlightColor)),  
      matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
    } 

Il motivo per cui non sto utilizzando il metodo Html.FromHtml è; mi obbliga ad usare il metodo setText che cambia posizione del cursore e poiché il mio edittext è cambiato anche da pulsanti (pulsanti chiama settext) non solo softkeyboard, quel metodo settext rovina la posizione del cursore dal pulsante cambia imposta la posizione del cursore a 0 EVEN IT NON È! !!! quindi non posso aggiungere qualcosa nel mezzo con il softkey (quando provo ad aggiungere, la posizione del cursore è impostata sempre su 0). Questo è il motivo per cui devo usare spannabile.

In ogni caso il mio problema è, ad esempio, uno dei miei testo speciale è "log" .. quando accedo ingresso funziona benissimo (registro), quando il registro di accodamento con carattere di spazio (Ceppo) funziona bene di nuovo ma QUANDO RIMUOVO g dal secondo registro, anche il primo colore di registro è andato !!! (log lo) che non deve essere previsto. Pensa ai registri in grassetto come sono colorati ...

Perché sta succedendo?

+0

La tua lasso assomiglia (in html come sintassi): Ceppo pskink

+0

Quando ho setText cursore la posizione è passata allo zero finché l'utente non entra con la tastiera software. Possono inserire in entrambi i modi. Html = setText –

risposta

0

se ho capito bene quello che stai cercando di fare, si dovrebbe provare qualcosa di simile:

edit.addTextChangedListener(new TextWatcher() 
{ 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
     Spannable inputStr = (Spannable)s; 
     for (String function : functionList) 
     { 
      for (ForegroundColorSpan old : inputStr.getSpans(start, inputStr.length(), ForegroundColorSpan.class)) 
       inputStr.removeSpan(old); 

      final Pattern p = Pattern.compile(function); 
      final Matcher matcher = p.matcher(inputStr); 
      while (matcher.find()) 
       inputStr.setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 

    @Override 
    public void afterTextChanged(Editable s) { } 
});