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,接下来会在项目中考虑使用,有下一步进展,再来更新这篇文章

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