1. 程式人生 > >Android實戰SpannableString多行圖文混排的應用

Android實戰SpannableString多行圖文混排的應用

首先我們來看下這張效果圖,注意圖片中置頂這個圖片是如何實現的呢?當然你也可也設定他的點選事件,比如帶有視訊或者其他類的,這裡我們就不多做介紹了,看專案具體需求就好。

效果1

效果二

如果就涉及到一行的話我們只需要在文字後面加個imageview就行,但是如果多行顯示的話這樣做就不太好了

那麼什麼是SpannableString呢?

SpannableString其實和String一樣,都是一種字串型別,同樣TextView也可以直接設定SpannableString作為顯示文字,不同的是SpannableString可以通過使用其方法setSpan方法實現字串各種形式風格的顯示,重要的是可以指定設定的區間,也就是為字串指定下標區間內的子字串設定格式。

setSpan(Object what, int start, int end, int flags)方法需要使用者輸入四個引數,what表示設定的格式是什麼,可以是前景色、背景色也可以是可點選的文字等等,start表示需要設定格式的子字串的起始下標,同理end表示末尾下標,flags就是一種標識,共有以下四種屬性:

Spanned.SPAN_INCLUSIVE_EXCLUSIVE 從起始下標到末尾下標,包括起始下標,不包括後面
Spanned.SPAN_INCLUSIVE_INCLUSIVE 從起始下標到末尾下標,同時包括起始下標和末尾下標,前後包括
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 從起始下標到末尾下標,但都不包括起始下標和末尾下標
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 從起始下標到末尾下標,包括末尾下標

到此,那我們看看如何在程式碼中實現這一效果呢?

String title = MapUtil.getValueStr(datas.get(position), "Title");
            try {
                title = java.net.URLDecoder.decode(title, "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //圖文混排
            Drawable drawable = getResources().getDrawable
(R.mipmap.icon_top); drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());//這裡後兩位不要填寫int類引數,否則會出現在大屏手機上顯示不整齊的情況 ImageSpan is = new ImageSpan(drawable); String space = " "; title = title + space; int strLength = title.length(); SpannableString ss = new SpannableString(title); ss .setSpan(is,strLength-1, strLength, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); if ("1".equals(TopFlag)) { //置頂顯示 viewHolder.title.setText(ss.subSequence(0,strLength)); } else { viewHolder.title.setText(title); }

我們拿到介面返回的title後,把我們需要的圖片通過 Drawable drawable = getResources().getDrawable(R.mipmap.icon_top);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());//這裡後兩位不要填寫int類引數,否則會出現在大屏手機上顯示不整齊的情況

拿到圖片後設置你想要的大小和位置即可輕鬆快速實現這一效果。

那麼怎麼實現效果2那種name和內容顏色區分開呢?有人會覺得,這不name寫個佈局,內容寫個佈局就ok了嗎?是的這樣寫沒錯能夠實現這個效果,但是,你注意到這種評論文字他是一行結束跳轉開頭繼續顯示的,你那樣做的話肯定不行了,只能夠集中顯示不會到開頭

好了分析完了我們具體看看如何輕鬆實現這一效果吧!

` /**
*
*
* @author 建立人: kris_liutao
*
* @description 功能描述: 利用SpannableString將不同的文字型別拼接起來ForegroundColorSpan只能使用int型別引數
*
*/

            String name = (MapUtil.getValueStr(datas.get(position), "Name"));
            String resourName = (MapUtil.getValueStr(datas.get(position), "ReceiverName"));
            String msg = name +" 回覆 "+resourName+" :"+ content;

            int fstart=msg.indexOf(name);
            int fend=fstart+name.length();

            int bstart=msg.indexOf(resourName);
            int bend=bstart+resourName.length();
            SpannableString spannableString = new SpannableString(msg);
            spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#21D04B") ),fstart,fend, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
            spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#21D04B") ),bstart,bend, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

            holder.content.setText(spannableString);

`

注意看程式碼部分
String name = (MapUtil.getValueStr(datas.get(position), “Name”));

String resourName = (MapUtil.getValueStr(datas.get(position), “ReceiverName”));

String content = MapUtil.getValueStr(datas.get(position), “Content”);

這是我們介面返回的名字和內容,我們只需要設定名字的顏色的話那麼通過
String resourName = (MapUtil.getValueStr(datas.get(position), “ReceiverName”));
String msg = name +” 回覆 “+resourName+” :”+ content;

            int fstart=msg.indexOf(name);
            int fend=fstart+name.length();

拼接將name取出來,得到name的length(),然後通過SpannableString建立新的物件
SpannableString spannableString = new SpannableString(msg);
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(“#21D04B”) ),fstart,fend, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

ForegroundColorSpan這個設定的是字型的顏色,BackgroundColorSpan這個引數是選中內容設定背景顏色等等,最後holder.content.setText(spannableString);將SpannableString的物件設定到你想要的地方即可實現這一效果。

簡書

相關推薦

Android實戰SpannableString圖文應用

首先我們來看下這張效果圖,注意圖片中置頂這個圖片是如何實現的呢?當然你也可也設定他的點選事件,比如帶有視訊或者其他類的,這裡我們就不多做介紹了,看專案具體需求就好。 如果就涉及到一行的話我們只需要在文字後面加個imageview就行,但是如果多行顯

Android學習筆記2 TextView圖文,顯示新增的圖片,三種常用方法,親測

圖文混排,文字就不說了,主要是顯示圖片的方法 1、TextView使用ImageSpan顯示圖片 ImageSpan span = new ImageSpan(this, R.drawable.ic_launcher);//載入圖片的資源 SpannableStrin

Android 自繪TextView解決提前換問題,支援圖文

先看下效果圖: 上面是MTextView,下面是預設的TextView。 一、原因 用最簡單的全英文句子為例,如果有一個很長的單詞,這一行剩餘的空間顯示不下了,那麼規則就是不打斷單詞,而是把整個單詞丟到下一行開始顯示。這樣本來沒有錯。一是咱們中國人都是方塊字,怎麼都放

android 你所不知道的類SpannableStringBuilder的總結--實現圖文,檢視更,下劃線等等

今天無意中看到的一個類SpannableStringBuilder,查了下感覺很牛叉; 1.看下實現的效果 第一種 第二種 實現的程式碼見   使用的模板 2.簡單的使用模板: publiccl

Android圖文-實現EditText圖文混合插入上傳

origin uri keyword src llb fail ren -a amp 前段時間做了一個Android會議管理系統,項目需求涉及到EditText的圖文混排,如圖: 在上圖的”會議詳情”中。須要支持文本和圖片的混合插入,下圖演示輸入的

Android 純原生 圖文 心得

好久沒有上號   今天寫一下  純原生圖文混排心得     最近的專案裡需要展示圖文混排的格式,因為一些特殊原因需要純原生操作。眾所周知,圖文混排我們可以使用Html.fromHtml(source, imageGette

Android RecyclerView 佈局與

多佈局   關於RecyclerView的基本用法參考下面三篇部落格:  Android RecyclerView之代替ListView與GridView  Android RecyclerView之新增Item分割線  Android RecyclerView 的瀑布流式

RichEditeText——android圖文富文字文章編輯器實現詳解

需求:android 實現富文字編輯器,並且實現html解析和生成。 功能點: 字型加粗,斜體,下劃線,刪除線 字型設定大小   預設大(18px),中(16px),小(14px) 字型設定顏色 換行插入圖片 編輯內容生成html 解析html並且顯示 主要實現

android 解析html 圖文

public class MyImageGetter implements Html.ImageGetter { WeakReference<TextView> mTextViewReference; Context mContext; public MyIm

android藍芽聊天開發(2)圖文+Notification訊息通知

使用listView,繼承BaseAdapter,實現聊天介面:,執行圖: layout_list_item.xml單個item條目的佈局,即圖片,聊天內容,時間的佈局: <?xml version="1.0" encoding="utf-8"?> <Relat

android藍芽聊天開發(1)輸入對話+隱藏對話+圖文

介面效果: 注意: 1.文字框預設文字是“tel:10086”,當你點選文字時,文字會祕文顯示(即。。。。。這樣),再次點選,會顯示原文,實際就呼叫了一個Text物件的 setTransformationMethod(PasswordTransformationMethod.get

Android實現圖文的筆記·終篇

Android實現圖文混排的筆記·終篇 開始之前,先歡呼一下神馬筆記1.1.0_beta版本完成。 點選〖神馬筆記 版本1.1.0_beta〗瞭解新版本新增的功能。 整個圖文混排的功能經過了以下的開發過程。 〖Android如何實現圖文混排〗

android TextView部分字型顏色設定以及圖文

Drawable drawable = context.getResources().getDrawable(R.drawable.icon_wecircle_up); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getInt

android TextView 實現圖文

// 一,需求:Android 使用TextView實現 圖文混排 android專案中很多圖文混排問題,如果使用簡單的TextView和ImageView很難實現我們想要的效果。但Android TextView其實很強大,如果簡單隻用於顯示我們需要

TextView圖文圖片被截斷的問題以及Android省略號只有一個點的問題

TextView中實現圖文混排主要採用的是SpannableStringBuilder、ImageSpan、正則表示式協同完成,具體的實現,自己去百度吧。 今天主要想說的是在圖文混排的時候,如果TextView設定了最大長度並且textView.setEllipsize(T

Android TextView圖文,圖片和文字居中對齊

TextView用來顯示文字是最普通的用法了,有些情況需要我們再文字中顯示圖片,比如顯示錶情,下邊來說說處理方法. 1.下圖是專案中一個UI需求 如圖需要在文字的前邊顯示新上標籤,開始的處理方法是用了兩個空間分別顯示標籤和文字,但是有個問題是第二行的文字

Android 解決圖文,圖片和文字居中對齊問題(ImageSpan)

一. 概述 眾所周知,Android圖文混排可以通過SpannableString來實現,通過在相應位置使用ImageSpan替換即可,但是使用過的人會發現,imageSpan只提供了兩種對齊方式,如下所示: /** 底部對齊

Android 圖文(EditText)

最近公司的專案中要求使用者可以在移動端編輯圖文混排,以前沒有弄過這方面的東東,所以一方面記錄一下開發歷程,一方面秉著分享的精神寫出來希望對看到這篇文章的人一點幫助。 先上效果圖 搜尋了一下網上的解決方案我這裡找到了兩個: 1.採用SpannableSt

CSS佈局之圖文,影象簽名,圖拼接和圖片特效

    <divid="text">       高圓圓,中國女演員,1979年10月5日出生於北京市豐臺區雲崗一個普通的知識分子家庭。1996年高圓圓被廣告公司發掘,隨後拍攝了大量廣告,成為了廣告圈中的模特。1997年高圓圓出演了她的第一部電影《愛情麻辣燙》,從此開始了她的演員生涯。2001年高

android TextView 載入html 顯示圖片並且新增img標籤點選事件工具類 富文字 圖文 圖片大小調整

注意,本人部落格主要是為了自己記錄,如果有問題歡迎反饋哈。 android的TextView可以載入html程式碼,並且識別他們的標籤,用的方法就是setText(Html.fromHtml(source)),其中source是指定的字串,包含html標籤,用setText