Я имею в виду, можно ли изменить текст "и этот текст-это синий", чтобы синий цвет в одну строку? Должен быть способ...
<TextView
android:gravity="left"
android:padding="3dip"
android:text="This text is white. This text is blue."
android:textColor="#ffffff"
android:textSize="22dp"/>
Да, это возможно. Для этого нужно использовать SpannableString
и ForegroundColorSpan
.
Это должно выглядеть примерно так:
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);
Простой способ сделать это состоит в использовании HTML и набор текста в поле TextView` программно.
String text = "This text is white. <font color=\"blue\">This text is blue.</font>";
textView.setText(Html.fromHtml(text), BufferType.SPANNABLE);
Попробуйте это..
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));
и ** результат будет такой..
В формате HTML.fromHtml(строка)
не поддерживается в Андроид НДля поддержки последней версии Android что-то вроде этого
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));
}
Вы можете попробовать это: Во фрагменте :
@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);
}
Я создал класс, как это:
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;
}
}
Это позволяет мне делать такие вещи:
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(") ");
}
Для создания ленты тиккера. Очень хорошо работает и держит чистый код.
Я использую для изменения звезд, если обслуживание и"далее" и;
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);
Вы можете увидеть, как это
String text = "<font color=#000>this color is black </font><font color=#6ab04c>this color is green</font>";
textview.setText(Html.fromHtml(text));