安卓實現富文字(1)
阿新 • • 發佈:2019-01-10
本篇文章實現自我編輯富文字,就是說可以實現讓自己編輯的文字以富文字的形式展示
主要參考的是這位大神的部落格
展示富文字的思路
- 首先需要拿到使用者在編輯框編輯的文字
- 然後根據使用者選擇的富文字方式(比如說,一些文字的顏色改變,文字背景改變,部分文字變大變小等等)
- 用特定的工廠類將使用者選擇的文字包裝即可
- 嗯。。。。。關於這個工廠類google已經幫我們寫好了,接下來看我們直接用就好
###先來看下簡單的效果
- emmmmm.效果就是這樣,只是上下兩個簡單的textView,只是將我們給她設定的字串用特定的工具類處理之後就變成了豐富多彩的富文字
話不多說,來看google為我們提供的好東西吧
- Google提供富文字封裝類Spannable
- 他提供兩個方法
public void setSpan(Object what, int start, int end, int flags);
public void removeSpan(Object what);
- 第一個方法是來為特定的文字設定富文字效果的,第一個引數是一個工具例項類,它表明了文字的格式,第二個和第三個表明你要給哪些文字設定,最後一個是對第二個和第三個引數的註釋,就相當於數學中集合的左閉右開,左開右閉等等,不夠我試了好幾次,好像並沒有用,不過大家對這個也不用太過關心,只需要按需要設定好第二個和第三個引數就好了
- 第二個方法明顯是移除某種文字效果
看一下具體程式碼實現吧
var textView = findViewById<TextView>(R.id.main_TextView)
var s = "測試測試,再說一遍,這真的是測試文字!"
val spannable = Spannable.Factory.getInstance().newSpannable(s)//將字串包裝成可操作的文字格式
val backgroundColorSpan = BackgroundColorSpan(Color.parseColor("#FF0000"))//例項一個具體富文字格式工具類
spannable.setSpan(backgroundColorSpan, 0 , 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//給0-9的字元設定成上面那種背景
tv!!.setText(spannable)
- 嗯,你沒有看錯,就是這麼簡單
- 接下來我的一般的富文字格式工具類羅列一下
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.parseColor("#FF0000"));//文字背景,也就是文字的顏色
ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));//文字前景
RelativeSizeSpan sizeSpanBig = new RelativeSizeSpan(1.4f);//放大或者縮小,取決於後面的浮點數大於或者小於一
StrikethroughSpan strikethroughSpan = new StrikethroughSpan();//刪除線,就是文字中間一條線
UnderlineSpan sizeSpan = new UnderlineSpan();//下劃線
StyleSpan styleSpan_Bold = new StyleSpan(Typeface.BOLD);//粗體
StyleSpan styleSpan_Italic = new StyleSpan(Typeface.ITALIC);//斜體
//這三句是構建一個圖片,注意將圖片設定進去的時候會覆蓋那個第二個和第三個引數的所在的字
Drawable image = this.getResources().getDrawable(R.mipmap.star);
image.setBounds(0,0,60,60);
ImageSpan imageSpan = new ImageSpan(image);
- 還有兩個特殊的
spannable.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(this, "點選測試", Toast.LENGTH_LONG).show();
}
},9, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
URLSpan urlSpan = new URLSpan("http://blog.csdn.net/lpc_java?viewmode=list");
spannableUrl.setSpan(urlSpan, 9, spannable.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
- 還可以設定文字的點選事件,是不是超級炫
- 注意:textView.setMovementMethod(LinkMovementMethod.getInstance());必須設定TextView的MovementMethod才有點選效果
###總結
- 如果我們想自己寫一個富文字編輯器,是不是就可以通過自己設定按鈕,來關聯不同的工具類來實現不同的文字形式了呢
- 最後貼上一下官方的這些工具類的地址吧,你可以去瞧瞧有沒有自己感興趣的格式呢