Ich möchte Canvas.drawText () verwenden, um mehrfarbigen Text anzuzeigen. Genauer gesagt, möchte ich einen Teilstring des Textes markieren, der an die drawText () -Methode übergeben wird.
Der Text hat die Form eines SpannableString mit 0 oder mehr ForegroundColorSpan-Objekten.
Wenn Sie sich den Canvas-Code ansehen, scheint es, dass ein .toString () - Aufruf für die übergebene CharSequence bedeutet, dass dies nicht möglich ist.
Gibt es einen alternativen Weg?
EDIT: Der Text kann sich gelegentlich ändern (Gesamtänderungen, nicht inkrementell). Außerdem befinden sich potenziell mehrere Texte an verschiedenen Standorten in der benutzerdefinierten Ansicht.
Ja, das ist möglich, indem Sie eine der Layout -Klassen verwenden. Dies sind Hilfsklassen zum Zeichnen von Text in eine Arbeitsfläche und unterstützen Spannables. Wenn sich Ihr Text nicht ändert, verwenden Sie ein StaticLayout.
Beispiel
Fügen Sie dies Ihrer benutzerdefinierten Ansichtsklasse hinzu
%Vor% setze diesen Code in dein onLayout
oder onSizeChanged
Rufen Sie dann in Ihrer Zeichenmethode einfach
auf %Vor% Falls sich Ihr Text häufig ändert, können Sie DynamicLayout
verwenden.
Ändern Sie den Text mithilfe des Bearbeitungsobjekts
%Vor%Ich habe es nicht mit Canvas verwendet. Siehe unten Code, wie ich es in Textansicht verwendet habe.
%Vor%Sie können nun Textview als Bitmap auf Canvas zeichnen, obwohl ich denke, dass diese Methoden auch in der Malklasse existieren. Hoffnung nützlich für dich.
Versuchen Sie etwas wie das, wenn Sie TextView
verwenden %Vor%Bearbeiten: Überprüfen Sie für SpannableString, ob die folgenden Ihnen hilft
%Vor%Immer wenn Sie diesen Text für diese Ansicht schreiben, können Sie thatView.setBackgroundResource (R.drawable.multicolor); und
festlegenIn multicolor.xml schreiben
%Vor%Ich hoffe, es wird definitiv funktionieren
Um die Textfarbe zu ändern, können Sie yourView.setTextColor (R.drawable.multicolor);
verwendenTags und Links android android-canvas