Wie der Titel schon sagt, möchte ich wissen, ob es möglich ist, zwei verschiedenfarbige Zeichen in einem einzigen Textansichtselement zu erzielen.
Wie der Titel schon sagt, möchte ich wissen, ob es möglich ist, zwei verschiedenfarbige Zeichen in einem einzigen Textansichtselement zu erzielen.
Antworten:
Ja, wenn Sie die Eigenschaft String
with html
's formatieren, übergeben Sie font-color
sie an die MethodeHtml.fromHtml(your text here)
String text = "<font color=#cc0029>First Color</font> <font color=#ffcc00>Second Color</font>";
yourtextview.setText(Html.fromHtml(text));
Html.escapeHtml(str)
.
Html.fromHtml(String)
ist jetzt veraltet, stattdessen verwenden Html.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Weitere Informationen finden Sie hier.
Sie können Linien mit mehreren Farben ohne HTML wie folgt drucken:
TextView textView = (TextView) findViewById(R.id.mytextview01);
Spannable word = new SpannableString("Your message");
word.setSpan(new ForegroundColorSpan(Color.BLUE), 0, word.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(word);
Spannable wordTwo = new SpannableString("Your new message");
wordTwo.setSpan(new ForegroundColorSpan(Color.RED), 0, wordTwo.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.append(wordTwo);
Sie können verwenden Spannable
, um Effekte auf Ihre TextView
:
Hier ist mein Beispiel für das Färben nur des ersten Teils eines TextView
Textes (während Sie die Farbe dynamisch einstellen können, anstatt sie wie im HTML-Beispiel hart in einen String zu codieren!)
mTextView.setText("Red text is here", BufferType.SPANNABLE);
Spannable span = (Spannable) mTextView.getText();
span.setSpan(new ForegroundColorSpan(0xFFFF0000), 0, "Red".length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
In diesem Beispiel können Sie 0xFFFF0000 durch a ersetzen getResources().getColor(R.color.red)
Ich habe so gemacht:
Stellen Sie die Farbe auf Text ein, indem Sie String und Farbe übergeben :
private String getColoredSpanned(String text, String color) {
String input = "<font color=" + color + ">" + text + "</font>";
return input;
}
Stellen Sie Text in TextView / Button / EditText usw. ein, indem Sie den folgenden Code aufrufen:
Textübersicht:
TextView txtView = (TextView)findViewById(R.id.txtView);
Farbige Zeichenfolge abrufen:
String name = getColoredSpanned("Hiren", "#800000");
String surName = getColoredSpanned("Patel","#000080");
Stellen Sie Text in TextView aus zwei Zeichenfolgen mit unterschiedlichen Farben ein:
txtView.setText(Html.fromHtml(name+" "+surName));
Getan
Html.fromHtml("...")
durch Anrufe anHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
Verwenden Sie SpannableStringBuilder
SpannableStringBuilder builder = new SpannableStringBuilder();
SpannableString str1= new SpannableString("Text1");
str1.setSpan(new ForegroundColorSpan(Color.RED), 0, str1.length(), 0);
builder.append(str1);
SpannableString str2= new SpannableString(appMode.toString());
str2.setSpan(new ForegroundColorSpan(Color.GREEN), 0, str2.length(), 0);
builder.append(str2);
TextView tv = (TextView) view.findViewById(android.R.id.text1);
tv.setText( builder, TextView.BufferType.SPANNABLE);
Hey Leute, ich habe das getan, probier es aus
TextView textView=(TextView)findViewById(R.id.yourTextView);//init
//here I am appending two string into my textView with two diff colors.
//I have done from fragment so I used here getActivity(),
//If you are trying it from Activity then pass className.this or this;
textView.append(TextViewUtils.getColoredString(getString(R.string.preString),ContextCompat.getColor(getActivity(),R.color.firstColor)));
textView.append(TextViewUtils.getColoredString(getString(R.string.postString),ContextCompat.getColor(getActivity(),R.color.secondColor)));
Fügen Sie in Ihrer TextViewUtils-Klasse diese Methode hinzu
/***
*
* @param mString this will setup to your textView
* @param colorId text will fill with this color.
* @return string with color, it will append to textView.
*/
public static Spannable getColoredString(String mString, int colorId) {
Spannable spannable = new SpannableString(mString);
spannable.setSpan(new ForegroundColorSpan(colorId), 0, spannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Log.d(TAG,spannable.toString());
return spannable;
}
Es ist besser, die Zeichenfolge in der Zeichenfolgendatei als solche zu verwenden:
<string name="some_text">
<![CDATA[
normal color <font color=\'#06a7eb\'>special color</font>]]>
</string>
Verwendung:
textView.text=HtmlCompat.fromHtml(getString(R.string.some_text), HtmlCompat.FROM_HTML_MODE_LEGACY)
Ich habe einen Code für eine andere Frage aufgeschrieben, die dieser ähnlich ist, aber diese Frage wurde dupliziert, sodass ich sie dort nicht beantworten kann. Ich setze meinen Code nur hier ein, wenn jemand nach derselben Anforderung sucht.
Der Code funktioniert nicht vollständig. Sie müssen einige geringfügige Änderungen vornehmen, damit er funktioniert.
Hier ist der Code:
Ich habe die @ Graeme-Idee verwendet, spannbaren Text zu verwenden.
String colorfulText = "colorfulText";
Spannable span = new SpannableString(colorfulText);
for ( int i = 0, len = colorfulText.length(); i < len; i++ ){
span.setSpan(new ForegroundColorSpan(getRandomColor()), i, i+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
((TextView)findViewById(R.id.txtSplashscreenCopywrite)).setText(span);
Zufällige Farbmethode:
private int getRandomColor(){
Random rnd = new Random();
return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}
Versuche dies:
mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" + "<br />" +
"<small>" + description + "</small>" + "<br />" +
"<small>" + DateAdded + "</small>"));
Verwenden Sie die SpannableBuilder-Klasse anstelle der HTML-Formatierung, sofern dies möglich ist, da sie schneller als das Parsen des HTML-Formats ist. Siehe meinen eigenen Benchmark "SpannableBuilder vs HTML" auf Github Danke!
Tolle Antworten! Ich konnte Spannable verwenden, um regenbogenfarbenen Text zu erstellen (dies konnte also für jede Reihe von Farben wiederholt werden). Hier ist meine Methode, wenn sie jemandem hilft:
private Spannable buildRainbowText(String pack_name) {
int[] colors = new int[]{Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE, Color.RED, 0xFFFF9933, Color.YELLOW, Color.GREEN, Color.BLUE};
Spannable word = new SpannableString(pack_name);
for(int i = 0; i < word.length(); i++) {
word.setSpan(new ForegroundColorSpan(colors[i]), i, i+1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return word;
}
Und dann setze ich einfachText (buildRainboxText (pack_name)); Beachten Sie, dass alle Wörter, die ich eingebe, weniger als 15 Zeichen enthalten und dies nur dreimal 5 Farben wiederholt - Sie möchten die Farben / Länge des Arrays für Ihre Verwendung anpassen!
if (Build.VERSION.SDK_INT >= 24) {
Html.fromHtml(String, flag) // for 24 API and more
} else {
Html.fromHtml(String) // or for older API
}
für 24 API und mehr (Flag)
public static final int FROM_HTML_MODE_COMPACT = 63;
public static final int FROM_HTML_MODE_LEGACY = 0;
public static final int FROM_HTML_OPTION_USE_CSS_COLORS = 256;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE = 32;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_DIV = 16;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_HEADING = 2;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST = 8;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_LIST_ITEM = 4;
public static final int FROM_HTML_SEPARATOR_LINE_BREAK_PARAGRAPH = 1;
public static final int TO_HTML_PARAGRAPH_LINES_CONSECUTIVE = 0;
public static final int TO_HTML_PARAGRAPH_LINES_INDIVIDUAL = 1;
Seit API 24 haben Sie FROM_HTML_OPTION_USE_CSS_COLORS, sodass Sie Farben in CSS definieren können, anstatt sie ständig zu wiederholen. font color="
Wenn Sie etwas HTML haben und einige vordefinierte Tags hervorheben möchten, müssen Sie nur das CSS-Fragment oben in Ihrem HTML hinzufügen
25. Juni 2020 von @canerkaseler
Ich möchte Kotlin teilen Antwort :
fun setTextColor(tv:TextView, startPosition:Int, endPosition:Int, color:Int){
val spannableStr = SpannableString(tv.text)
val underlineSpan = UnderlineSpan()
spannableStr.setSpan(
underlineSpan,
startPosition,
endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
)
val backgroundColorSpan = ForegroundColorSpan(this.resources.getColor(R.color.agreement_color))
spannableStr.setSpan(
backgroundColorSpan,
startPosition,
endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
)
val styleSpanItalic = StyleSpan(Typeface.BOLD)
spannableStr.setSpan(
styleSpanItalic,
startPosition,
endPosition,
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
)
tv.text = spannableStr
}
Rufen Sie danach die obige Funktion auf. Sie können mehrere anrufen:
setTextColor(textView, 0, 61, R.color.agreement_color)
setTextColor(textView, 65, 75, R.color.colorPrimary)
Ausgabe: Sie können Unterstreichungen und verschiedene Farben miteinander sehen.
@canerkaseler