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;  
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章