Başlıktan da anlaşılacağı gibi, tek bir metin görünümü öğesinde iki farklı renkli karakter elde etmenin mümkün olup olmadığını bilmek istiyorum.
Başlıktan da anlaşılacağı gibi, tek bir metin görünümü öğesinde iki farklı renkli karakter elde etmenin mümkün olup olmadığını bilmek istiyorum.
Yanıtlar:
Biçimlendirmek eğer evet String
ile html
bireyin font-color
mülkiyet sonra yöntemine geçmekHtml.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)
artık kullanımdan kaldırıldı, bunun yerine kullanın Html.fromHtml(String, Html.FROM_HTML_MODE_LEGACY)
. Daha fazla bilgiyi burada bulabilirsiniz.
HTML olmadan birden fazla renk içeren satırları aşağıdaki gibi yazdırabilirsiniz:
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);
Aşağıdakilere Spannable
efekt uygulamak için kullanabilirsiniz TextView
:
İşte bir TextView
metnin sadece ilk kısmını renklendirmek için benim örneğim (HTML örneğinde olduğu gibi rengi bir String'e kodlamak yerine dinamik olarak ayarlamanıza izin verirken!)
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);
Bu örnekte 0xFFFF0000'ü bir getResources().getColor(R.color.red)
Bu şekilde yaptım:
Takım Renk üzerinde Metin tarafından Dize geçen ve renk :
private String getColoredSpanned(String text, String color) {
String input = "<font color=" + color + ">" + text + "</font>";
return input;
}
Küme metin üzerinde TextView / Düğme / EditText kodunun altına arayarak vb:
Metin görünümü:
TextView txtView = (TextView)findViewById(R.id.txtView);
Renkli Dize Alın:
String name = getColoredSpanned("Hiren", "#800000");
String surName = getColoredSpanned("Patel","#000080");
TextView üzerinde Metin Ayarla Farklı renkteki iki dizenin metni:
txtView.setText(Html.fromHtml(name+" "+surName));
Bitti
Html.fromHtml("...")
çağrıları ileHtml.fromHtml("...", FROM_HTML_MODE_LEGACY)
SpannableStringBuilder Kullan
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 çocuklar bunu yaptım, dene
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)));
İçinizde TextViewUtils sınıfı bu yöntemi ekleyin
/***
*
* @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;
}
Dizeyi dizeler dosyasında kullanmak daha iyidir:
<string name="some_text">
<![CDATA[
normal color <font color=\'#06a7eb\'>special color</font>]]>
</string>
Kullanımı:
textView.text=HtmlCompat.fromHtml(getString(R.string.some_text), HtmlCompat.FROM_HTML_MODE_LEGACY)
Ben buna benzer başka bir soru için bazı kod yazmak var, ama bu soru çoğaltıldı, bu yüzden ben orada cevap veremem, bu yüzden birisi aynı gereksinimi arayan sadece burada kodumu koyuyorum.
Tam olarak çalışma kodu değil, çalışmasını sağlamak için bazı küçük değişiklikler yapmanız gerekir.
İşte kod:
@Graeme fikrini;
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);
Rastgele Renk Yöntemi:
private int getRandomColor(){
Random rnd = new Random();
return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}
Bunu dene:
mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" + "<br />" +
"<small>" + description + "</small>" + "<br />" +
"<small>" + DateAdded + "</small>"));
HTML biçimi ayrıştırmasından daha hızlı olduğu için mümkün olan yerlerde HTML biçimlendirme yerine SpannableBuilder sınıfını kullanın. Üzerinde kendi kriter "HTML vs SpannableBuilder" Bkz Github teşekkür!
Müthiş cevaplar! Spannable'ı gökkuşağı renkli metin oluşturmak için kullanabildim (bu, herhangi bir renk dizisi için tekrarlanabilir). İşte benim yöntem, eğer herkese yardımcı olur:
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;
}
Ve sonra ben sadece setText (buildRainboxText (paket_adı)); Geçtiğim tüm kelimelerin 15 karakterin altında olduğunu ve bu sadece 5 rengi 3 kez tekrarladığını unutmayın - kullanımınız için dizinin renklerini / uzunluğunu ayarlamak istersiniz!
if (Build.VERSION.SDK_INT >= 24) {
Html.fromHtml(String, flag) // for 24 API and more
} else {
Html.fromHtml(String) // or for older API
}
24 API ve daha fazlası için (işaret)
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;
API 24'ten beri FROM_HTML_OPTION_USE_CSS_COLORS'a sahipsiniz, böylece CSS'de renkleri her zaman tekrarlamak yerine font color="
çok daha net bir şekilde tanımlayabilirsiniz - bazı html'leriniz varsa ve bazı önceden tanımlanmış etiketleri vurgulamak istediğinizde - html'nizin üstüne CSS parçası eklemeniz yeterlidir
25 Haziran 2020 @canerkaseler
Kotlin Cevap paylaşmak istiyorum :
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
}
Sonra yukarıdaki işlevi çağırın. Birden fazla kişiyi arayabilirsiniz:
setTextColor(textView, 0, 61, R.color.agreement_color)
setTextColor(textView, 65, 75, R.color.colorPrimary)
Çıktı: Altı çizili ve farklı renkleri birbirinizle görebilirsiniz.
@canerkaseler