TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接,或者设置个别字的颜色、字体等,那就需要用到Spannable对象,可以借助Spannable对象实现以上设置。
效果图:


Activity代码:
Java代码
  1. packagecom.zhou.activity;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Color;
  4. importandroid.os.Bundle;
  5. importandroid.text.Spannable;
  6. importandroid.text.SpannableString;
  7. importandroid.text.Spanned;
  8. importandroid.text.method.LinkMovementMethod;
  9. importandroid.text.style.BackgroundColorSpan;
  10. importandroid.text.style.ForegroundColorSpan;
  11. importandroid.text.style.StyleSpan;
  12. importandroid.text.style.URLSpan;
  13. importandroid.widget.TextView;
  14. publicclassTextViewLinkActivityextendsActivity{
  15. TextViewmyTextView;
  16. @Override
  17. publicvoidonCreate(BundlesavedInstanceState){
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. myTextView=(TextView)this.findViewById(R.id.myTextView);
  21. //创建一个SpannableString对象
  22. SpannableStringsp=newSpannableString("这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体.");
  23. //设置超链接
  24. sp.setSpan(newURLSpan("http://www.baidu.com"),5,7,
  25. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  26. //设置高亮样式一
  27. sp.setSpan(newBackgroundColorSpan(Color.RED),17,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  28. //设置高亮样式二
  29. sp.setSpan(newForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
  30. //设置斜体
  31. sp.setSpan(newStyleSpan(android.graphics.Typeface.BOLD_ITALIC),27,29,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
  32. //SpannableString对象设置给TextView
  33. myTextView.setText(sp);
  34. //设置TextView可点击
  35. myTextView.setMovementMethod(LinkMovementMethod.getInstance());
  36. }
  37. }

Spannalbe文档:

SpannalbeThis is the interface for text to which markup objects can be attached and detached. Not all Spannable classes have mutable text; see Editable for that.

setSpan方法:

public abstract void setSpan (Object what, int start, int end, int flags)Since: API Level 1Attach the specified markup object to the range startend of the text, or move the object to that range if it was already attached elsewhere. See Spanned for an explanation of what the flags mean. The object can be one that has meaning only within your application, or it can be one that the text system will use to affect text display or behavior. Some noteworthy ones are the subclasses of CharacterStyle and ParagraphStyle, and TextWatcher and SpanWatcher.

http://developer.android.com/referenc...

android 如何让文本中某个关键字高亮显示?

TextView tv = (TextView) findViewById(R.id.hello);
SpannableString s = new SpannableString(getResources().getString(R.string.linkify));

Pattern p = Pattern.compile("abc");


Matcher m = p.matcher(s);

while (m.find()) {
int start = m.start();
int end = m.end();
s.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(s);

或者: SpannableStringBuilder style = new SpannableStringBuilder("test Height light");
//参数一:高亮颜色[ForegroundColorSpan前景色]
//from:高亮开始
//to:高亮结束
style.setSpan(new ForegroundColorSpan(color), from, to, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
(TextView)view.setText(style);

或者:

可以使用以下两种方法来实现:
1.用Html类的fromHtml()方法格式化要放到TextView里的文字。这种方法不仅能够高亮部分文字,而且还能够使用HTML里面方式来格式化文字,显示出各种效果。

                    
  1. TextView.setText(Html.fromHtml("<font color=#FF0000>hello</font>"));

上述代码把hello设置成红色。
2.使用Spannable或实现它的类,如SpannableString。Spannable对象也可以实现一样的效果

                    
  1. SpannableString ss = new SpannableString("abcdefgh");
  2. ss.setSpan(new BackgroundColorSpan(Color.RED), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  3. TextView.setText(ss);

上述代码把[2,4)之间的字符设置成红色,也就是c和d。


1. 引言

在Android中,使某个字符串中的某个单词或汉字高亮,效果图及代码实现如下。

2. 效果图

3. 功能实现

1. 主界面(main.xml)实现:

[java] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:id="@+id/highLight"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. />
  12. </LinearLayout>

2. 主Activity实现:

[java] view plain copy
  1. packagecom.focus.fishme;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Color;
  4. importandroid.os.Bundle;
  5. importandroid.text.Spannable;
  6. importandroid.text.SpannableStringBuilder;
  7. importandroid.text.style.BackgroundColorSpan;
  8. importandroid.widget.TextView;
  9. publicclassHighLightActivityextendsActivity{
  10. @Override
  11. publicvoidonCreate(BundlesavedInstanceState){
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. TextViewhighLightView=(TextView)findViewById(R.id.highLight);
  15. StringhighLightStr="HighLightMaYingCai";
  16. StringhighLight="MaYingCai";
  17. intstart=highLightStr.indexOf(highLight);
  18. SpannableStringBuilderstyle=newSpannableStringBuilder(highLightStr);
  19. style.setSpan(newBackgroundColorSpan(Color.RED),start,start+highLight.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
  20. highLightView.setText(style);
  21. }
  22. }


如何实现TextView中的某个字体改变颜色 (SDK3.0尚未验证可用性)

这几天一直在想这个问题 现在想问问大家

请问想实现TextView中的某个字体改变颜色 有什么好的解决方法吗?

一个检索画面 检索出来的内容放在一个textView里面 想实现检索关键字改变颜色 像WebPage那样的

textView可以实现吗?

如果不可以 是否可以用webView来实现呢?

谢谢大家拉


已解决不过程序里有黄色的警告!

NSString *detailtxt = @"<font color='#ff0000'>";
detailtxt = [detailtxt stringByAppendingString:strColor];
detailtxt = [detailtxt stringByAppendingString:@"</font>"];
detailtxt = [detailtxt stringByAppendingString:detail];
[textView setContentToHTMLString:detailtxt];

yakie 2008-12-07 17:44
可以用webView来实现

具体参考代码例子。

superarts 2008-12-07 18:00
webview里,做个字符串替换就好了,把KEYWORD改成<div color="xxx">KEYWORD</div>之类(HTML我不熟,大概意思吧)。

textview当然也可以做个关键字变颜色的子类。

cocoa2008 2008-12-08 12:12
谢谢楼上两位的回答

superarts :你说textView也可以做?不明白怎么做

superarts 2008-12-08 13:47
写一个子类出来啊,好像是重写drawRect吧,勥人喜欢这么干,但是不才我只会用默认的控件而已。

如果写子类的话,大概的思路就是,根据rect和text,自己判断什么时候要换行,一个单词一个单词地写画上去;根据你的需要,要增加一个keyword属性,如果要画的单词等于keyword,就用另一种颜色画。

nerocoder 2008-12-08 14:02
ms要自画, 定义好模板, 用正则替换

crazyazreal 2008-12-08 15:38
明明用WebView会简单一点,非要重画?建议去看看html语法,用webview做 .

cocoa2008 2009-02-02 09:40
已解决
NSString *detailtxt = @"<font color='#ff0000'>";
detailtxt = [detailtxt stringByAppendingString:strColor];
detailtxt = [detailtxt stringByAppendingString:@"</font>"];
detailtxt = [detailtxt stringByAppendingString:detail];
[textView setContentToHTMLString:detailtxt];

alan 2009-02-23 00:20
及时雨,我也刚好碰到这类问题。

lvyile 2009-08-27 11:07
(SDK3.0尚未验证可用性)

bocol 2009-08-27 11:17
Undocumented API了,还是webview吧,都是殊途同归的




EditText:

通常用于显示文字,但有时候也需要在文字中夹杂一些图片,比如QQ中就可以使用表情图片,又比如需要的文字高亮显示等等,如何在android中也做到这样呢?
记得android中有个android.text包,这里提供了对文本的强大的处理功能。
添加图片主要用SpannableString和ImageSpan类:

     Drawable drawable = getResources().getDrawable(id);          drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());          //需要处理的文本,[smile]是需要被替代的文本          SpannableString spannable = new SpannableString(getText().toString()+"[smile]");          //要让图片替代指定的文字就要用ImageSpan          ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);          //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end)         //最后一个参数类似数学中的集合,[5,12)表示从5到12,包括5但不包括12          spannable.setSpan(span, getText().length(),getText().length()+"[smile]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);            setText(spannable);  

将需要的文字高亮显示:

public void highlight(int start,int end){          SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());//用于可变字符串          ForegroundColorSpan span=new ForegroundColorSpan(Color.RED);          spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          setText(spannable);      }  

加下划线:

public void underline(int start,int end){          SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());          CharacterStyle span=new UnderlineSpan();          spannable.setSpan(span, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          setText(spannable);      }  

组合运用:

SpannableStringBuilder spannable=new SpannableStringBuilder(getText().toString());          CharacterStyle span_1=new StyleSpan(android.graphics.Typeface.ITALIC);          CharacterStyle span_2=new ForegroundColorSpan(Color.RED);          spannable.setSpan(span_1, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          spannable.setSpan(span_2, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          setText(spannable);  

案例:带有\n换行符的字符串都可以用此方法显示2种颜色

    /**      * 带有\n换行符的字符串都可以用此方法显示2种颜色      * @param text      * @param color1      * @param color2      * @return      */      public SpannableStringBuilder highlight(String text,int color1,int color2,int fontSize){          SpannableStringBuilder spannable=new SpannableStringBuilder(text);//用于可变字符串          CharacterStyle span_0=null,span_1=null,span_2;          int end=text.indexOf("\n");          if(end==-1){//如果没有换行符就使用第一种颜色显示              span_0=new ForegroundColorSpan(color1);              spannable.setSpan(span_0, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          }else{              span_0=new ForegroundColorSpan(color1);              span_1=new ForegroundColorSpan(color2);              spannable.setSpan(span_0, 0, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);              spannable.setSpan(span_1, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);                            span_2=new AbsoluteSizeSpan(fontSize);//字体大小              spannable.setSpan(span_2, end+1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);          }          return spannable;      }  

以上实际都是Html.fromHtml(html)的代码实现形式。

=============================================================================

TextView: (方法与EditView类似)

如何让一个TextView中的关键字高亮显示?

                                                                     /**                         * 关键字高亮显示 *                         @param                         target 需要高亮的关键字                         */                                                 public                                                 void                         highlight(String target){ String temp                        =                        getText().toString(); SpannableStringBuilder spannable                         =                                                 new                         SpannableStringBuilder(temp); CharacterStyle span                        =                        null                        ; Pattern p                         =                         Pattern.compile(target); Matcher m                         =                         p.matcher(temp);                         while                         (m.find()) { span                         =                                                 new                         ForegroundColorSpan(Color.RED);                        //                        需要重复!                                                                 //span = new ImageSpan(drawable,ImageSpan.XX);//设置现在图片                                                  spannable.setSpan(span, m.start(), m.end(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } setText(spannable); }                     


更多相关文章

  1. Android(安卓)边框圆角
  2. Android(安卓)ViewPager 取消预加载
  3. Android简明开发教程十七:Dialog 显示图像
  4. 为什么应用商店里搜索不到你的App?
  5. Android(安卓)Studio 快捷键整理分享
  6. Android中显示动画的GIF-Movie类解决方案
  7. Android(安卓)Adapter 源码笔记(3)
  8. 【Android(安卓)Developers Training】 98. 获取联系人列表
  9. Android(安卓)TabHost设置setCurrentTab(index),当index!=0时,默认加

随机推荐

  1. Android入门一:Android(安卓)开发环境安装
  2. Android(安卓)插值器 Interpolator 介绍
  3. Android在MTP模式下,只显示指定文件夹
  4. Android四大组件的理解
  5. android Ant编译项目多渠道打包
  6. Android――Animation
  7. android 365手机秘书源代码
  8. MySQL七种JOIN类型小结
  9. MySQL中的引号和反引号的区别与用法详解
  10. SQL实战演练之网上商城数据库商品类别数