webentwicklung-frage-antwort-db.com.de

Kann die Textfarbe in einer Zeichenfolge in Java in mehrere Farben geändert werden?

Was ich meine ist, ist es möglich, den Text "Dieser Text ist blau" in einer einzigen Zeichenfolge in Blau zu ändern? Es muss einen Weg geben...

<TextView
    Android:gravity="left"
    Android:padding="3dip"
    Android:text="This text is white. This text is blue."
    Android:textColor="#ffffff"
    Android:textSize="22dp"/>
31
jmendegan

Ja es ist möglich. Dazu müssen Sie SpannableString und ForegroundColorSpan verwenden.

Das sollte ungefähr so ​​aussehen:

SpannableStringBuilder builder = new SpannableStringBuilder();

String red = "this is red";
SpannableString redSpannable= new SpannableString(red);
redSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, red.length(), 0);
builder.append(redSpannable);

String white = "this is white";
SpannableString whiteSpannable= new SpannableString(white);
whiteSpannable.setSpan(new ForegroundColorSpan(Color.WHITE), 0, white.length(), 0);
builder.append(whiteSpannable);

String blue = "this is blue";
SpannableString blueSpannable = new SpannableString(blue);
blueSpannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, blue.length(), 0);
builder.append(blueSpannable);

mTextView.setText(builder, BufferType.SPANNABLE);

enter image description here

107
inazaruk

Ein einfacher Weg, dies zu tun, besteht darin, HTML zu verwenden und den Text programmgesteuert auf TextView zu setzen.

String text = "This text is white. <font color=\"blue\">This text is blue.</font>";
textView.setText(Html.fromHtml(text), BufferType.SPANNABLE);
10
Jason Robinson

Versuche dies..

TextView update= (TextView) dialog.findViewById(R.id.address);
String colorText= "Driver is nearby "
                + "<font color=\"#E72A02\"><bold>"
                + "43, KR Rd, Tata Silk Farm, Jayanagar"
                + "</bold></font>"
                + " and he is "
                + "<font color=\"#B92000\"><bold>"
                + "11 km"
                + "</bold></font>"
                + " & "
                + "<font color=\"#B92000\"><bold>"
                + "20 mins"
                + "</bold></font>"
                + " away from your current location.";

        update.setText(Html.fromHtml(colorText));

und das Ergebnis wird so sein ..

result

Sie können dies versuchen: In einem Fragment:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

View rootView = inflater.inflate(
                R.layout.shipment_accepted_fragment,
                container, false);

        String email = "([email protected])";

        TextView shipment_email = (TextView) rootView
                .findViewById(R.id.textview);
        String text_shipment_email = "Hello"
                + " <font color='"
                + getResources().getColor(R.color.green_color) + "'>" + email
                + "</font>"
                + "Bye";
        shipment_email.setText(Html.fromHtml(text_shipment_email),
                TextView.BufferType.SPANNABLE);
}
1
Maddy

Ich habe eine Klasse wie diese erstellt:

import Android.text.SpannableStringBuilder;
import Android.text.style.CharacterStyle;

public class StyleableSpannableStringBuilder extends SpannableStringBuilder {
    public StyleableSpannableStringBuilder appendWithStyle(CharacterStyle c, CharSequence text) {
        super.append(text);
        int startPos = length() - text.length();
        setSpan(c, startPos, length(), 0);
        return this;
    }

    public StyleableSpannableStringBuilder appendWithStyle(CharacterStyle [] c, CharSequence text) {
        super.append(text);
        int startPos = length() - text.length();
        for (CharacterStyle c1 : c)
            setSpan(c1, startPos, length(), 0);         
        return this;
    }       
}

Dies erlaubt mir Dinge wie folgt zu machen:

private void buildTickerItem(DelayedQuoteServiceObject o)
{   
    Double lastPrice = Double.parseDouble(o.getValue("LastPrice"));
    Double dayChange = Double.parseDouble(o.getValue("DayChange"));
    Double percentChange = Double.parseDouble(o.getValue("PercentDayChange")) / 100;

    if (o.isIndex() == true)
    {

        tickerTapeData.appendWithStyle(new StyleSpan(Typeface.BOLD),o.getDisplayName());            
        tickerTapeData.append(" "+ indexFormat.format(lastPrice) + " (");

        if (dayChange >= 0)
            tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), indexFormat.format(dayChange));        
        else
            tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), indexFormat.format(dayChange));
    }
    else
    {
        tickerTapeData.appendWithStyle(new StyleSpan(Typeface.BOLD), o.ticker);

        tickerTapeData.append("@"+ dollarFormat.format(lastPrice) + " (");              

        if (dayChange >= 0)
            tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), dollarFormat.format(dayChange));       
        else
            tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), dollarFormat.format(dayChange));


    }

    tickerTapeData.append("/");


    if (dayChange >= 0)
        tickerTapeData.appendWithStyle(new ForegroundColorSpan(Colours.getTickerPositive()), percentFormat.format(percentChange));      
    else
        tickerTapeData.appendWithStyle(new ForegroundColorSpan(Color.RED), percentFormat.format(percentChange));

    tickerTapeData.append(")  ");       
}

So erstellen Sie ein Laufband. Funktioniert sehr gut und hält den Code sauber.

1
knaak

Html.fromHtml(String) ist in Android N veraltet

Um die neueste Version von Android zu unterstützen, so etwas wie dieses 

 val colorText = ("Some Normal Text\n" 
                    + "<font color=\"#FFA500\"><bold> Orange Text </bold></font>"
                    + "More Normal text")

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            venueAddressValue.setText(Html.fromHtml(colorText, Html.FROM_HTML_MODE_LEGACY));
        } else {
            venueAddressValue.setText(Html.fromHtml(colorText));
        }
1
Hitesh Sahu
String text = "<font color=#000>this color is black </font><font color=#6ab04c>this color is green</font>";

textview.setText(Html.fromHtml(text));
0
nithin joseph

Ich werde für einen Änderungsstern verwendet, wenn Dienst "Weiter"

String c = "*" + getResources().getString(R.string.rupee) + str_pay_at_store;
SpannableString spannable2 = new SpannableString(c);
spannable2.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, 
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv_payatstore.setText(spannable2);

Sie können so sehen

 enter image description here

0
Dhaval Shingala