it-swarm.com.de

Legen Sie die Farbe des TextView-Bereichs in Android fest

Kann in einem TextView nur die Farbe eines Textabschnitts eingestellt werden?

Ich möchte etwas Ähnliches wie die Twitter-App machen, bei der ein Teil des Textes blau ist. Siehe Bild unten:

alt text

166
hpique

Eine andere Antwort wäre sehr ähnlich, müsste aber den Text der TextView nicht zweimal setzen

TextView TV = (TextView)findViewById(R.id.mytextview01);

Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");        

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TV.setText(wordtoSpan);
365
DanO

Hier ist eine kleine Hilfefunktion. Toll für, wenn Sie mehrere Sprachen haben!

private void setColor(TextView view, String fulltext, String subtext, int color) {
    view.setText(fulltext, TextView.BufferType.SPANNABLE);
    Spannable str = (Spannable) view.getText();
    int i = fulltext.indexOf(subtext);
    str.setSpan(new ForegroundColorSpan(color), i, i + subtext.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
76
mach

Wenn Sie mehr Kontrolle wünschen, sollten Sie die TextPaint-Klasse überprüfen. So verwenden Sie es:

final ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(final View textView) {
        //Your onClick code here
    }

    @Override
    public void updateDrawState(final TextPaint textPaint) {
        textPaint.setColor(yourContext.getResources().getColor(R.color.orange));
        textPaint.setUnderlineText(true);
    }
};
25
Tiago

Ich finde immer visuelle Beispiele hilfreich, wenn ich versuche, ein neues Konzept zu verstehen.

Hintergrundfarbe

 enter image description here

SpannableString spannableString = new SpannableString("Hello World!");
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(backgroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

Vordergrundfarbe

 enter image description here

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, 0, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

Kombination

 enter image description here

SpannableString spannableString = new SpannableString("Hello World!");
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
BackgroundColorSpan backgroundSpan = new BackgroundColorSpan(Color.YELLOW);
spannableString.setSpan(foregroundSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(backgroundSpan, 3, spannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

Weitere Studie

22
Suragch

Stellen Sie den Text Ihrer TextView spannbar ein und definieren Sie eine ForegroundColorSpan für Ihren Text.

TextView textView = (TextView)findViewById(R.id.mytextview01);    
Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");          
wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
textView.setText(wordtoSpan);
18
Elenasys

Eine andere Möglichkeit, die in einigen Situationen verwendet werden kann, ist das Festlegen der Link-Farbe in den Eigenschaften der Ansicht, in der die Spannbarkeit verwendet wird.

Wenn Ihre Spannable beispielsweise in einer TextView verwendet werden soll, können Sie die Link-Farbe in XML folgendermaßen einstellen:

<TextView
    Android:id="@+id/myTextView"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColorLink="@color/your_color"
</TextView>

Sie können es auch im Code einstellen mit:

TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setLinkTextColor(your_color);
12
Dave

Es gibt eine Fabrik, in der das Spannbare Material erstellt werden kann.

Spannable span = Spannable.Factory.getInstance().newSpannable("text");
5

Setze Farbe auf Text von Durchlauf String und Farbe :

private String getColoredSpanned(String text, String color) {
  String input = "<font color=" + color + ">" + text + "</font>";
  return input;
}

Setze Text on TextView/Button/EditText etc durch Aufruf des folgenden Codes:

Textvorschau:

TextView txtView = (TextView)findViewById(R.id.txtView);

Farbige Zeichenfolge abrufen:

String name = getColoredSpanned("Hiren", "#800000");

Text in TextView setzen:

txtView.setText(Html.fromHtml(name));

Erledigt

5
Hiren Patel
String text = "I don't like Hasina.";
textView.setText(spannableString(text, 8, 14));

private SpannableString spannableString(String text, int start, int end) {
    SpannableString spannableString = new SpannableString(text);
    ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{0xffa10901});
    TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);

    spannableString.setSpan(highlightSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new BackgroundColorSpan(0xFFFCFF48), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new RelativeSizeSpan(1.5f), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    return spannableString;
}

Ausgabe:

 enter image description here

2

Zur akzeptierten Antwort hinzufügen, da alle Antworten nur über Android.graphics.Color sprechen: Was ist, wenn die gewünschte Farbe in res/values/colors.xml definiert ist?

Betrachten Sie zum Beispiel Material Design Farben , definiert in colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="md_blue_500">#2196F3</color>
</resources>

( Android_material_design_colours.xml ist dein bester Freund)

Verwenden Sie dann ContextCompat.getColor(getContext(), R.color.md_blue_500), wo Sie Color.BLUE verwenden würden, so dass:

wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

wird:

wordtoSpan.setSpan(new ForegroundColorSpan(ContextCompat.getColor(getContext(), R.color.md_blue_500)), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Wo ich das gefunden habe:

  1. erstellen Sie eine Textansicht in Ihrem Layout 
  2. fügen Sie diesen Code in Ihre MainActivity ein

    TextView textview=(TextView)findViewById(R.id.textviewid);
    Spannable spannable=new SpannableString("Hello my name is sunil");
    spannable.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 5, 
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    textview.setText(spannable);
    //Note:- the 0,5 is the size of colour which u want to give the strring
    //0,5 means it give colour to starting from h and ending with space i.e.(hello), if you want to change size and colour u can easily
    
0
Sunil

Hier ist eine Kotlin-Erweiterungsfunktion, die ich dafür habe

    fun TextView.setColouredSpan(Word: String, color: Int) {
        val spannableString = SpannableString(text)
        val start = text.indexOf(Word)
        val end = text.indexOf(Word) + Word.length
        try {
            spannableString.setSpan(ForegroundColorSpan(color), start, end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
            text = spannableString
        } catch (e: IndexOutOfBoundsException) {
         println("'$Word' was not not found in TextView text")
    }
}

Verwenden Sie es, nachdem Sie Ihren Text auf die Textansicht eingestellt haben

private val blueberry by lazy { getColor(R.color.blueberry) }

textViewTip.setColouredSpan("Warning", blueberry)
0
Ivan Wooll