在Android中设置TextView的颜色
有没有可能在TextView中设置文本的范围的颜色?
我想做类似于Twitter应用程序的东西,其中一部分文字是蓝色的。 见下图:
另一个答案会非常相似,但不需要两次设置TextView
的文本
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);
这里有一点帮助function。 当你有多种语言!
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); }
如果你想要更多的控制,你可能想检查TextPaint
类。 以下是如何使用它:
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); } };
设置您的TtextView
的文本spannable并为您的文本定义ForegroundColorSpan
。
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);
在某些情况下可以使用的另一种方法是在采用Spannable的视图的属性中设置链接颜色。
例如,如果您的Spannable将用于TextView中,则可以像下面这样设置XML中的链接颜色:
<TextView android:id="@+id/myTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColorLink="@color/your_color" </TextView>
你也可以在代码中设置它:
TextView tv = (TextView) findViewById(R.id.myTextView); tv.setLinkTextColor(your_color);
我总是在试图理解一个新概念的时候发现有视觉效果的例子。
背景颜色
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);
前景颜色
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);
组合
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);
进一步研究
- 解释Span标志的含义,如SPAN_EXCLUSIVE_EXCLUSIVE
- Android Spanned,SpannedString,Spannable,SpannableString和CharSequence
有一个用于创buildSpannable的工厂,并避免这样的投射:
Spannable span = Spannable.Factory.getInstance().newSpannable("text");
通过传递string和颜色在文本上设置颜色 :
private String getColoredSpanned(String text, String color) { String input = "<font color=" + color + ">" + text + "</font>"; return input; }
通过调用下面的代码在TextView / Button / EditText等设置文本 :
TextView的:
TextView txtView = (TextView)findViewById(R.id.txtView);
获取彩色string:
String name = getColoredSpanned("Hiren", "#800000");
在TextView上设置文本:
txtView.setText(Html.fromHtml(name));
完成
- 在你的布局中创buildtextview
-
粘贴这个代码在你的MainActivity
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 ie(hello), if you want to change size and colour u can easily