Reputation: 601
What I mean is, is it possible to change the text "This text is blue" to the color blue in a single string? There must be a way...
<TextView
android:gravity="left"
android:padding="3dip"
android:text="This text is white. This text is blue."
android:textColor="#ffffff"
android:textSize="22dp"/>
Upvotes: 41
Views: 75511
Reputation: 103
It's simple really. Just add these in your value/string.xml
<string name = 'string_name'><font color='#000000'>This is black</font><font color='#ffffff'>This is white</font></string>
Then add the name of that string to your XML resource file
Upvotes: 1
Reputation: 461
String text = "<font color=#000>this color is black </font><font color=#6ab04c>this color is green</font>";
textview.setText(Html.fromHtml(text));
Upvotes: 0
Reputation: 45160
Html.fromHtml(String)
is deprecated in Android NTo support latest version of Android so something like this
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));
}
Upvotes: 4
Reputation: 127
I am use for a change star if service "Onward"
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);
You can see like this
Upvotes: 0
Reputation: 4956
You can try this: In a 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);
}
Upvotes: 2
Reputation: 9442
Try this..
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));
and the result will be like this..
Upvotes: 8
Reputation: 1313
I created a class like this:
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;
}
}
This allows me to do things like this:
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(") ");
}
To create a ticker tape. Works pretty nicely and keeps the code clean.
Upvotes: 1
Reputation: 74790
Yes, its possible. For this you need to use SpannableString
and ForegroundColorSpan
.
This should look something like this:
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);
Upvotes: 139
Reputation: 31294
A simple way to do it is to use HTML and set the text to the TextView
programmatically.
String text = "This text is white. <font color=\"blue\">This text is blue.</font>";
textView.setText(Html.fromHtml(text), BufferType.SPANNABLE);
Upvotes: 12