textview设置多种不同的字体颜色和点击事件

最近项目需要用到textview为特定字符设置不同的颜色,如果用不同的控件拼起来的话一行也许没有问题,但是如果换行的话效果就不理想了就像qq空间回复品论的效果,昵称和内容文字颜色不一样,点击事件也不一样。 目前我找到两张方法,效果一样。想用哪种看个人喜好

1,使用html格式

String html = "看这里,测试<u>下划线</u>、<i>斜体字</i>、<font color=‘red‘>红色字</font>的格式";
tv.setText(Html.fromHtml(html));

怎样让TextView也显示Html中节点的图像呢?

可以看到fromHtml还有另一个重构:

fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)

实现一下ImageGetter就可以让图片显示了

ImageGetter imgGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
drawable = Drawable.createFromPath(source); // Or fetch it from the URL
// Important
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
return drawable;
}
};
tv.setText(Html.fromHtml(html, imgGetter, null));

2.使用SpannableString

  tv.setText(getSpan());
     tv.setHighlightColor(Color.TRANSPARENT);//去掉点击效果
     tv.setMovementMethod(LinkMovementMethod.getInstance());//这句话必须有,

     private SpannableString getSpan(){
        final View.OnClickListener l=new OnClickListener() {  

            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,WebViewActivity.class);
                intent.putExtra("url", "http://www.caiyanlicai.com/app/H5/privacy.html");
                startActivity(intent);
                overridePendingTransition(R.drawable.push_left_in,R.drawable.push_left_out); 

            }
        };
        final View.OnClickListener l2=new OnClickListener() {  

            @Override
            public void onClick(View v) {
                Intent intent =new Intent(MainActivity.this,WebViewActivity.class);
                intent.putExtra("url", "http://www.caiyanlicai.com/app/H5/agreement.html");
                startActivity(intent);
                overridePendingTransition(R.drawable.push_left_in,R.drawable.push_left_out);
            }
        };
        String one="瞬间爆炸";
        String two="完成单杀";
        String and=" 和 ";
         SpannableString spnableInfo=new SpannableString(one+and+two);
        int start=one.length()+and.length();
        int end=one.length()+two.length()+and.length();
        int start2=0;
        int end2=one.length();  

        spnableInfo.setSpan(new ClickableSpan() {
            @Override
            public void updateDrawState(TextPaint ds) {
                // TODO Auto-generated method stub
                super.updateDrawState(ds);
                ds.setUnderlineText(false);//去掉下划线
            }
            @Override
            public void onClick(View widget) {
                // TODO Auto-generated method stub
                l.onClick(widget);
            }
        }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spnableInfo.setSpan(new ForegroundColorSpan(Color.parseColor("#007aff")), start, end,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spnableInfo.setSpan(new ClickableSpan() {
            @Override
            public void updateDrawState(TextPaint ds) {
                // TODO Auto-generated method stub
                super.updateDrawState(ds);
                ds.setUnderlineText(false);
            }
            @Override
            public void onClick(View widget) {
                // TODO Auto-generated method stub
                l2.onClick(widget);
            }
        }, start2, end2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        spnableInfo.setSpan(new ForegroundColorSpan(Color.parseColor("#007aff")), start2, end2,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spnableInfo;
    }
时间: 2024-10-09 04:40:59

textview设置多种不同的字体颜色和点击事件的相关文章

TextView 多文字字体颜色及点击事件

像微信朋友圈点赞功能如:张三.李四.王五.这种格式 最早做法是在layout中创建一个父类容器如linearlayout然后在创建一个子layout,在代码中 通过for循环addView添加到父类容器当中,虽然可以实现效果但是这样无形中会增加很多view控件. 通过SpannableStringBuilder只通过一个textview就可以实现上面的效果. InvitationLike userLike; SpannableStringBuilder builder = new Spannab

TextView 设置部分文字颜色及点击事件SpannableString

设置TextView中一部分文字的颜色及点击事件. SpannableString gotoMsgListStr = new SpannableString("消息列表"); gotoMsgListStr.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { startActivity(new Intent(OrderPayStatusActivity.this, MsgListActivi

Android一个TextView设置多种颜色

有时候一个文本框为了强调内容需要显示不同颜色,用以下代码可以轻松实现 //为文本框设置多种颜色 textView=(TextView)findViewById(R.id.text_show); SpannableStringBuilder style = new SpannableStringBuilder("备注:签收人(张三)"); style.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 3, Spannable.SPAN_EXC

一起学android之如何设置TextView中不同字段的字体颜色(22)

在这里先看看效果图: OK,有时候,在我们的项目中会要求TextView中文本有一部分的字体颜色不一样,这时我们应该使用 SpannableStringBuilder这个工具类,当然这个类的功能很强大,这里我只是实现上面的样式,其它的不做介绍, SpannableStringBuilder的实现接口是Spannable这个接口,而Spannable最终都实现了CharSequence,因此我们直 接可以通过TextView.setText()来进行设置. 下面给出实现代码: public cla

Android一个TextView设置多种颜色的2种高效方法

有时候一个文本框为了强调内容须要显示不同颜色,用下面代码能够轻松实现 方法一:(适用于颜色变化多的情况) //为文本框设置多种颜色 textView=(TextView)findViewById(R.id.text_show); SpannableStringBuilder style = new SpannableStringBuilder("备注:签收人(张三)"); style.setSpan(new ForegroundColorSpan(Color.BLUE), 0, 3,

TextView下划线,部分文字并响应点击事件(SpannableString)

TextView useInfo = (TextView) findViewById(R.id.info); useInfo.setText("开始即表示您同意遵守"); String url_0_text = "用户协议及隐私条款"; SpannableString spStr = new SpannableString(url_0_text); spStr.setSpan(new ClickableSpan() { @Override public void u

TextView高级应用之:实现部分文字点击事件

有时候我们在应用中要实现一个看简单的功能,比如在TextView上显示了一些文字,要求文字的部分内容颜色与其它文字不同,而且竞价文字点击功能.实现也比较简单: public class TestActivity extends Activity { private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setConte

android textview 中部分内容 颜色 样式 点击事件的设置

// 文本内容 SpannableString ss = new SpannableString(remindtitle); int stringlength = ss.length(); // 设置0-2的字符颜色 ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置2-5的字符链接到电话簿,点击时触发拨号 ss.setSpan(new URLSpan("tel

textview设置部分文字颜色、点击事件

SpannableStringBuilder spannable = new SpannableStringBuilder(getResources().getString(R.string.home_dialog_reg_protocol));spannable.setSpan(new MyClickableSpan(1),163, 169, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);spannable.setSpan(new MyClickableSpan(2)