android中自定义textView自动区分SpannableStringBuilder中的不同样式字体
我在网上搜索了很多有关SpannableStringBuilder以及SpannableString的帖子,发现都是教学怎么使用,或者是api讲解.并不是我所需要的结果.我在论坛中搜索了一下SpannableString,找到的也是类似于教学的问答.
问题描述:需要实现一个类似于TextView的功能.
问题演示:在android中,通过系统的TextView,直接就进行setText所显示的效果是这样的:
String str1 = "11111111";
SpannableString spannableString1 = new SpannableString(str1);
spannableString1.setSpan(new AbsoluteSizeSpan(20, true), 0, str1.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
String str2 = "22222222";
SpannableString spannableString2 = new SpannableString(str2);
spannableString2.setSpan(new AbsoluteSizeSpan(50, true), 0, str2.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
SpannableStringBuilder ssb = new SpannableStringBuilder();
ssb.append(spannableString1).append(spannableString2);
TextView textView = new TextView(this);
textView.setText(ssb);
setContentView(textView);
需求描述:现在我需要自己重新继承View,自己用Canvas以及paint来绘制文字.也需要实现这样的效果.这个时候,自定义的View就需要实现类似系统TextView的功能,能够自动识别所设置的SpannableString中的字体样式.
查阅过程:我翻阅了google,baidu,stackoverflow,android dev上面大部分文档以及提问帖,还有android TextView的源码.都没有找到相关的资料.
在csdn上又看到过一个,在EditText上实现不同文字显示,但这个是通过选择文字进行对应的样式添加.首先,这样是能够知道是某一段到某一段之间的文字需要变成某一种样式.
而我现在的情况是,不知道某一段到某一段,应该变成一个什么样的预设值的样式(预设值:指之前在生成SpannableString时候添加的字体样式).
所以在这里求教,想要理解一下这个思路或实现方式等.
在帖子上或通过Gmail或QQ都能够联系我.
Gmail:china.sunhz@gamil.com
QQ:272119494
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
..好尴尬,没有人回答..
最后这个我问题,我这样解决的.(我翻看了TextView的源码,可惜看不太懂)
重写了SpannableString,在里面定义了一个tag字段,用来区分这段文字是什么类型.
然后自定义了一个SpannableStringBuilder,里面维护了一个ArrayList,用来区分每一段append进去的文字.
如果有大牛觉得这样写不好,或者是有其他方案,欢迎共同讨论交流.
//----------------------------
又发现了一种方法
如果设置了其他的Span,那就通过类似的方法拿出来.
不过如果把多个SpannableString放到SpannableStringBuilder里面去.还是没有办法区分他的起始位置和结束为止,这里就还是需要用到上面自定义的MySpannableStringBuilder来进行存储.