android富文本的實現

項目上碰到一個需求,需要對一篇文章進行多樣標記,類似於批改作文那樣。
想了很久,一開始覺得應該在String中加標籤,突然被同事一提醒,SpannableString,茅塞頓開啊


先上兩個參考地址,隨項目進行中來補全這篇文章

案例非常詳細了
1.http://blog.it985.com/14433.html

解釋flag
2.http://blog.csdn.net/xijiaohuangcao/article/details/7839856


以下是我的Demo源碼及效果

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (position) {
        case 0:
            //下劃線
            SpannableString spanString = new SpannableString("這是一條下劃線");
            UnderlineSpan span = new UnderlineSpan();
            spanString.setSpan(span, 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString);
            break;
        case 1:
            //文字顏色
            SpannableString spanString1 = new SpannableString("文字顏色藍色");
            ForegroundColorSpan span1 = new ForegroundColorSpan(Color.BLUE);
            spanString1.setSpan(span1, 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString1);
            break;
        case 2:
            //字體大小
            SpannableString spanString2 = new SpannableString("36號字體");
            AbsoluteSizeSpan span2 = new AbsoluteSizeSpan(36);
            spanString2.setSpan(span2, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString2);
            break;
        case 3:
            //光棧效果
            SpannableString spanString3 = new SpannableString("要展現光棧效果");
            spanString3.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString3);
            break;
        case 4:
            //加粗
            SpannableString spanString4 = new SpannableString("粗體很粗");
            StyleSpan span4 = new StyleSpan(Typeface.BOLD_ITALIC);
            spanString4.setSpan(span4, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString4);
            break;
        case 5:
            //刪除線
            SpannableString spanString5 = new SpannableString("刪除線");
            StrikethroughSpan span5 = new StrikethroughSpan();
            spanString5.setSpan(span5, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString5);
            break;
        case 6:
            //文字背景顏色
            SpannableString spanString6 = new SpannableString("文字背景顏色");
            BackgroundColorSpan span6 = new BackgroundColorSpan(Color.YELLOW);
            spanString6.setSpan(span6, 0, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString6);
            break;
        case 7:
            //文字的某一部分轉變爲圖片
            SpannableString spanString7 = new SpannableString("文字轉變爲圖片");
            Drawable d1 = getResources().getDrawable(R.drawable.ic_launcher);
            d1.setBounds(0, 0, d1.getIntrinsicWidth(), d1.getIntrinsicHeight());
            ImageSpan span7 = new ImageSpan(d1, ImageSpan.ALIGN_BASELINE);
            spanString7.setSpan(span7, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            mTxt.append(spanString7);
            break;
        }
    }

這裏寫圖片描述

應該很清楚了,這是在gridview中的OnItemClick事件(偷懶拿了個以前簡單的Gridview做demo),不同Item實現不同的效果。
第1個Item是加 下劃線
第2個Item是加 文字顏色
第3個Item是加 字體大小
第4個Item是加 光棧效果
第5個Item是加 粗
第6個Item是加 文字背景顏色
第7個Item是將 文字的某一部分轉變爲圖片


說明一下,SPAN_EXCLUSIVE_EXCLUSIVE/ SPAN_INCLUSIVE_EXCLUSIVE/ SPAN_EXCLUSIVE_INCLUSIVE
這三個不同的值的意義在於,如果你在原先文本的效果上繼續添加左右兩側的文字,那INCLUSIVE代表延續原有的效果(色彩、大小等等),EXCLUSIVE代表不延續,使用默認的黑色文字。這個屬性是按左右排列,左邊EXCLUSIVE就是你的富文本左側新加文字不使用富文本效果,左邊INCLUSIVE就是你的富文本左側新加文字使用你富文本的效果,右側同理。


好了,目前爲止,只是Demo,接下來會在項目中考慮使用,有下一步進展,再來更新這篇文章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章