在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)); 

完成

  1. 在你的布局中创buildtextview
  2. 粘贴这个代码在你的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