【android】手写用于修改字体设置富文本的span

这代码这么好怎么就用不上了呢(抹泪)

下面亲测可用

Button underline=(Button)findViewById(R.id.underline);
        underline.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int start =edit_passage.getSelectionStart();
                int end = edit_passage.getSelectionEnd();
                SpannableStringBuilder ssb = new SpannableStringBuilder(edit_passage.getEditableText());
                ssb.setSpan(new UnderlineSpan(), start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                edit_passage.setText(ssb);
            }
        });

加粗与取消(取消!!!)这个取消我测试了好久好久才好……


        Button bold = (Button) findViewById(R.id.bold);
        bold.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int start = edit_passage.getSelectionStart();
                int end = edit_passage.getSelectionEnd();
                SpannableStringBuilder ss = (SpannableStringBuilder) edit_passage.getEditableText();//subSequence(start,end);
                int num = 0;
                int cnt = 0;
                for (int i = start; i <= end; i++) {
                    StyleSpan[] spans = ss.getSpans(i, i, StyleSpan.class);
                    num++;
                    for (int j = 0; j < spans.length; j++) {
                        if (spans[j].getStyle() == Typeface.BOLD)
                            cnt++;
                    }
                }
                if (cnt == num) {
                    StyleSpan[] spans = ss.getSpans(start, end, StyleSpan.class);
                    for (int j = 0; j < spans.length; j++) {
                        if (spans[j].getStyle() == Typeface.BOLD)
                            ss.removeSpan(spans[j]);
                    }
                } else {
                    ss.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    edit_passage.setText(ss);
                }
                edit_passage.setText(ss);
            }
        });

下划线道理相同,以后换个什么的话 只需把setspan里面那个stylespan修改一下即可。

直接remove似乎是不行的,要先去获取到~~~~  好像是必须要属于它才可以 


        Button italic = (Button) findViewById(R.id.italic);
        italic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int start = edit_passage.getSelectionStart();
                int end = edit_passage.getSelectionEnd();
                SpannableStringBuilder ss = (SpannableStringBuilder) edit_passage.getEditableText();
                int num = 0;
                int cnt = 0;
                for (int i = start; i <= end; i++) {
                    StyleSpan[] spans = ss.getSpans(i, i, StyleSpan.class);
                    num++;
                    for (int j = 0; j < spans.length; j++) {
                        if (spans[j].getStyle() == Typeface.ITALIC)
                            cnt++;
                    }
                }
                if (cnt == num) {
                    StyleSpan[] spans = ss.getSpans(start, end, StyleSpan.class);
                    for (int j = 0; j < spans.length; j++) {
                        if (spans[j].getStyle() == Typeface.ITALIC)
                            ss.removeSpan(spans[j]);
                    }
                } else {
                    ss.setSpan(new StyleSpan(Typeface.ITALIC), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                    edit_passage.setText(ss);
                }
                edit_passage.setText(ss);
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值