網站首頁 編程語言 正文
1.引言
在開發過程中經常需要使用文本,有時候需要對一段文字中的部分文字進行特殊的處理,如改變其中部分文字的大小、顏色、加下劃線等,這個時候使用Span就能方便地解決這些問題。本文將主要介紹SpannableStringBuilder和各種Span的使用。
2.SpannableStringBuilder的基本用法
新建一個SpannableStringBuilder對象的操作如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!");
SpannableStringBuilder的setSpan()方法如下:
//what:各種文本Span,如BackgroundColorSpan、ForegroundColorSpan等 //start:應用Span的文本的開始位置索引 //end:應用Span的文本的結束位置索引 //flags:標志 public void setSpan(Object what, int start, int end, int flags) { setSpan(true, what, start, end, flags, true/*enforceParagraph*/); }
3.使用Span給文本添加效果
3.1 AbsoluteSizeSpan
此Span用來改變文本的絕對大小,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new AbsoluteSizeSpan(60),3,9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.2 BackgroundColorSpan
此Span用來改變文本的背景顏色大小,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new BackgroundColorSpan(Color.GREEN),3,9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.3 ClickableSpan
此Span用來給文本添加點擊效果,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new ClickableSpan() { @Override public void onClick(@NonNull View widget) { Toast.makeText(MainActivity.this,"ClickableSpan",Toast.LENGTH_SHORT).show(); } }, 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder); tv_content.setMovementMethod(LinkMovementMethod.getInstance()); tv_content.setHighlightColor(Color.TRANSPARENT);
3.4 DrawableMarginSpan
此Span用來給段落添加drawable和padding,這個padding指的是drawable和文本之間的距離,默認值是0,Span要從文本的起始位置設置,否則Span將不會渲染或者錯誤地渲染,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); Drawable drawable = AppCompatResources.getDrawable(MainActivity.this,R.drawable.ic_launcher); builder.setSpan(new DrawableMarginSpan(drawable,30), 0, builder.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.5 DynamicDrawableSpan
此Span使用drawable替換文本內容,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new DynamicDrawableSpan() { @Override public Drawable getDrawable() { Drawable drawable = AppCompatResources.getDrawable(MainActivity.this,R.drawable.ic_launcher); drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight()); return drawable; } }, 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.6 ForegroundColorSpan
此Span可以用來改變文本的顏色,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new ForegroundColorSpan(Color.GREEN), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.7 IconMarginSpan
此Span可以在文本開始的地方添加位圖,而且可以在位圖和文本之間設置padding,padding的默認值是0px,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); builder.setSpan(new IconMarginSpan(bitmap,30), 0, builder.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.8 ImageSpan
此Span可以使用Drawable替換文本,創建ImageSpan的構造方法有很多,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new ImageSpan(MainActivity.this,R.drawable.ic_launcher), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.9 MaskFilterSpan
此Span可以給文本設置MaskFilter,例如給文本設置模糊效果,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); MaskFilter maskFilter = new BlurMaskFilter(10f, BlurMaskFilter.Blur.NORMAL); builder.setSpan(new MaskFilterSpan(maskFilter), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.10 QuoteSpan
此Span可以在文本開始的地方添加一個垂直的線條,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new QuoteSpan(Color.GREEN), 0, builder.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.11 RelativeSizeSpan
此Span可以按一定的比例縮放文本的大小,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new RelativeSizeSpan(2.0f), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.12 ScaleXSpan
此Span以一定的系數在水平方向縮放文本的大小,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new ScaleXSpan(2.5f), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.13 StrikethroughSpan
此Span可以在文本上添加下劃線,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new StrikethroughSpan(), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.14 StyleSpan
此Span可以設置文本的樣式,可用的樣式有Typeface.NORMAL、Typeface.BOLD、Typeface.ITALIC、Typeface.BOLD_ITALIC,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new StyleSpan(Typeface.BOLD), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.15 SubscriptSpan
此Span可以將文本的基線移動到更低的地方,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new SubscriptSpan(), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.16 SuperscriptSpan
此Span可以將文本的基線移動到更高的地方,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new SuperscriptSpan(), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
3.17 UnderlineSpan()
此Span可以在文本下面添加下劃線,示例如下:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new UnderlineSpan(), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
4.多個Span組合使用
Span不但可以單獨使用,還可以組合在一起使用,以下示例演示了如何同時加粗文字,改變文字的顏色和添加下滑線:
SpannableStringBuilder builder = new SpannableStringBuilder("Hello World!"); builder.setSpan(new UnderlineSpan(), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); builder.setSpan(new ForegroundColorSpan(Color.GREEN), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); builder.setSpan(new StyleSpan(Typeface.BOLD), 3, 9, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); tv_content.setText(builder);
5.總結
Span的功能相當豐富,如改變文本顏色、大小、添加點擊效果、加下劃線等功能,本文介紹了經常用到的各種Span,Span支持單獨使用和組合使用,使用它能夠對文本進行各種靈活的操作,去實現個性化的需求。
原文鏈接:https://juejin.cn/post/7043064985848643591
相關推薦
- 2023-02-06 Go語言基礎學習之數組的使用詳解_Golang
- 2022-07-26 react如何添加less環境配置_React
- 2022-10-23 react優雅處理多條件鼠標拖拽位移_React
- 2023-02-07 Redis?中ZSET數據類型命令使用及對應場景總結(案例詳解)_Redis
- 2022-11-08 Python?Pandas教程之series?上的轉換操作_python
- 2022-05-01 Python字符串和其常用函數合集_python
- 2022-05-10 gin實現限流中間件
- 2022-12-31 C++?Boost?Uuid超詳細講解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支