2017-11-09 3 views
0

Ich habe EditText und 3 Farbauswahlfelder. Ich möchte eine Farbe auswählen und dann den Text in EditText eingeben. Momentan kann ich nur den Text schreiben, auswählen und dann die Farbe des Textes ändern.Android - Textfarbe vor der Texteingabe in EditText setzen

enter image description here

ich folgende habe versucht, aber nicht funktioniert hat:

  • Einstellung ForegroundColorSpan Spanne Spannable.SPAN_INCLUSIVE_INCLUSIVE in TextWatcher und onCheckedChanged

  • Spanne jedem Zeichen Hinzufügen

  • Entferne alle Strecken vor dem Hinzufügen g neue

Ich habe auch versucht, die Farbe aller Spannweiten zu drucken und es sieht aus wie die Spannweite richtig Zugabe, aber die EditText zeigt nicht die Farben nach diesen Spannweiten. Zum Beispiel:

char = 0 (T) 
    span 0 = Green 
    span 1 = Green 
char = 1 (E) 
    span 0 = Green 
    span 1 = Green 
char = 1 (S) 
    span 0 = Green 
    span 1 = Red 
char = 2 (T) 
    span 0 = Green 
    span 1 = Red 

Output: EditText shows "TEST" in all green color 
Note: selecting the text and applying span shows correct colors in EditText 

-> Layout/activity.xml

<EditText 
    android:id="@+id/edittext" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textMultiLine|textNoSuggestions" /> 

-> MainActivity.java

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ....... 

    mEdittext.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
      spannable.setSpan(new ForegroundColorSpan(selectedColor), i, i, Spannable.SPAN_INCLUSIVE_INCLUSIVE); 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 

     } 
    }); 
} 

@Override 
public void onCheckedChanged(RadioGroup group, int checkedId) { 

    Spannable spannable = this.mEditText.getText(); 
    int selStart = this.mEditText.getSelectionStart(); 
    int selEnd = this.mEditText.getSelectionEnd(); 

    if(group.getId() == R.id.radioGroupColor) { 

     int selected = 0; 
     switch (checkedId) { 
      case R.id.radioGreen: 
       selected = Color.GREEN; 
       break; 
      case R.id.radioRed: 
       selected = Color.RED; 
       break; 
      case R.id.radioBlue: 
       selected = Color.BLUE; 
       break; 
     } 

     if(selStart == selEnd) { 
      // There is no selection 
     } else { 
      spannable.setSpan(new ForegroundColorSpan(selected), selStart, selEnd, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 
     } 
    } 

} 
+0

Überprüfen Sie diesen Beitrag https://StackOverflow.com/Questions/8043767/android-different-colours-for-different-characters-in-edittext – Jonik

+0

Dank @Jonik Wie in meiner aktualisierten Frage erwähnt, habe ich bereits versucht, dass aber es funktioniert nicht. Ich kann HTML nicht verwenden, da die Textfarben vom Benutzer ausgewählt werden. – user427969

Antwort

0

Set Farbe von Text vor Text in EditText eingeben

Für gute Praxis, möchte ich vorschlagen, dass Sie TextWatcher verwenden. Sie sollten die Methode onTextChanged überschreiben.

onTextChanged (CharSequence s, int Start, int vor, int count) - Diese Methode wird aufgerufen, um Sie zu benachrichtigen, dass innerhalb s haben die Zählung Zeichen am Anfang erst am Anfang ersetzt alten Text, der hatte Länge vorher.

public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // Your Work 

    } 

lesen TextWatcher Example.

+0

Danke @IntelliJAmiya, ich habe meine Frage aktualisiert. Ich habe bereits versucht, 'TextWatcher' zu verwenden, aber der EditText zeigt die Farben nicht richtig an – user427969