1. 程式人生 > >SpannableString,多個textview合為一個,還可以為TextView新增圖片

SpannableString,多個textview合為一個,還可以為TextView新增圖片

       最近產品提出一個需求,就是模仿微信朋友圈,然後就想怎麼做,本文主要來講的是SpannableString,關於朋友圈設計的其它知識點就不說了。其實用起來很簡單,難搞的地方就是位置的計算,一不小心就會角標越界,接下來會說一下SpannableString的常用的用法。

       為textview新增文字和圖片。

        String content = "小凡送給主播跑車3個";

    SpannableString sInfo = new SpannableString(content);
    sInfo.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.text_white
)),content.length()-4, content.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    這是給textview設定字型顏色,ForegroundColorSpan顧名思義就是設定背景色,構造器中的第一個引數是要設定的字型顏色,第二個引數是從某個位置開始,第三個引數是從某個位置結束,第四個引數的意思是下面自己翻譯一下。
/**
 * Spans of type SPAN_EXCLUSIVE_EXCLUSIVE do not expand
 * to include text inserted at either their starting or ending point.
* They can never have a length of 0 and are automatically removed * from the buffer if all the text they cover is removed. */
接著就是給textview新增圖片,
  CustomImageSpan imageSpan = new CustomImageSpan(goodsDrawable);新增圖片需要用到這個類CustomImageSpan,構造器中的引數是Drawable,也就是你要設定的圖片,得到CustomImageSpan的物件後,sInfo.setSpan(imageSpan, 
content.length() + 1, content.length() + 2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);還是呼叫上面的方法,這次傳的引數除了第一個,其它三個都是一樣的,意思也是一樣的,第一個引數變為了CustomImageSpan的物件,這樣就把圖片新增到了你的textview的最後面了,也就是(小凡送給主播跑車3個+圖片)。
    為textview上不同的文字位置新增點選事件。

  String content = "小凡送給主播跑車3個";

    SpannableString sInfo = new SpannableString(content);
sInfo.setSpan(
        new ClickableSpan() {
            @Override
public void onClick(View view) {
                //這裡就是點選事件了,可以在這裡處理你的點選事件
            }

            @Override
public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(mContext.getResources().getColor(R.color.text_red));
                ds.setUnderlineText(false);
            }
        }, content.length()-4, comment.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
     其實和上面新增文字顏色和圖片是一樣的,只是第一個引數不一樣,第一個引數變為了ClickableSpan的物件,第二個引數是點選事件的起始位置,第三個引數是點選事件的結束位置,也就是這兩個引數就設定了點選事件的區域.
     常用的也就這些用法了,以後遇到別的用法再補充。

相關推薦

SpannableString,textview一個可以為TextView新增圖片

       最近產品提出一個需求,就是模仿微信朋友圈,然後就想怎麼做,本文主要來講的是SpannableString,關於朋友圈設計的其它知識點就不說了。其實用起來很簡單,難搞的地方就是位置的計算,一不小心就會角標越界,接下來會說一下SpannableString的常用的

視訊怎麼合成一個什麼合併視訊軟體好用

視訊的剪輯和合成是使用較多的一個功能,平時自己錄製視訊可能都會分享到社交平臺上,然而在分享之前,我們必然會做很多的處理,比如濾鏡,美顏,分割,合成等等的操作,前兩者很簡單,那怎麼將錄製的幾個視訊合成一個呢?可能很多朋友都還不知道該怎麼解決這一問題,一起來看看多個視訊怎麼合成一個,什麼合併視訊軟體好用吧!1、第

Python + Appium 【已解決】driver(session)在class之間復用執行完一個類的用例再次執行下類的用例時不需要初始化

nic bject config com appium client lee session ted py文件的名稱為:appium_config.py 中的寫法如下 # coding=UTF-8 ‘‘‘ Created on 2017.1.13 @author: Lu

js 一個一維數組算出元素之間相互組合的所有情況

urn each pre 相互 get function post data nta // 數據源 var target = { state1: [‘1‘, ‘2‘], state2: [‘01‘, ‘02‘, ‘03‘],

cv::Mat類型圖片的接口

區域 使用 depth left img style return urn 創建 1、 cv::Mat get_merage_image(cv::Mat cur_frame) { cv::Mat image_one=cur_frame; cv::Mat image_

在linux系統下把終端並在一個窗口

多少 img 打開 就會 組合 分享圖片 csdn linux系統 https 用正常的方式打開一個終端。 2.使用組合鍵 ctrl+shift+t , 這時就在同一個窗口中打開了另一個終端,當然再按一次ctrl+shift+t,會再生成一個,需要多少了大家可以自行

JavaScripth5播放器video點擊一個播放其他暫停

html itl file dev elements tex oct () utf <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

近期處理Highcharts圖標時碰到重復操作所以編寫了一個流程控制器

null sql 控制 lin end created 格式 har 合並數組 HTML選擇頁面 第一部分:<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/9/8 * Tim

一個tomcat部署專案(同埠專案不同訪問路徑)

使用tomcat的自動部署。(適用於檔案和war包,不需要重啟tomcat服務) 自定義web部署檔案。(只適用於檔案形式的,需要重啟tomcat服務) 一,自動部署 步驟: 瀏覽器輸入127.0.0.1:8080(如果你安裝時,改了埠的話,更改成你設定的埠),

如何把pdf並成一個pdf

功能 shadow png 點擊 方框 狀態 ges 電腦 完整 伴隨著工作的日積月累,電腦上零散的PDF文件也越來越多,經常有一些同一類型的文件分成好幾個PDF文件,大家都想將相同的文件整理成一份PDF文件,這樣不僅不會丟失某一部分文件,也方便文件的查找,那麽如何把多個P

一個伺服器搭tomcat導致session丟失或者同一個IP不同埠應用的session會衝突解決方法

 一個伺服器上搭建了多個tomcat或者weblogic,埠不一樣,同時啟動訪問時session丟失。如:A,B兩個服務,在瀏覽器中登入訪問A後,當前開啟的瀏覽器上在開一個選項卡訪問B服務後,回過來點選訪問A時session丟失,需要重新登入A才可以訪問。經過資料查詢,發

一個標籤裡面有class屬性的時候如何判斷是否有哪個屬性

如圖,選中的那一行<button>標籤,裡面的class值,有兩個,一個是startTime還有一個是chooseButton,我需要判斷是否含有chooseButton這個class,再進行相應的操作,當只有一個一個class的時候,我們可以通過$(this).attr('cla

一個頁面存在echarts圖形,resize失效圖形自適應視窗大小

當一個頁面有兩個echarts圖形,想要頁面大小發生改變,重新繪製圖形如果還寫為                   myChart.se

python 中如何在一個函式中呼叫另一個函式返回的值中的一個

在一個函式中呼叫另一個函式返回的多個值中的一個 首先,定義了一個函式 。 程式碼如下: def createDataSet(): group = array([[1.0,1.1],[1

list合併一個缺少的填0並按其中一個的順序排列

with cte as (      select id,1 level,name from ts_dictionary where parentid=''63"      union all      select g.id,level +1,g.name from

編寫一個字串(a~z)過濾函式對於字形符串中出現的相同的字形符將非首次出現的字元過濾掉

public class StringFilter { public static String stringFilter(String input) { boolean[] bools = new boolean[26]; for (int i = 0; i <

資料讀取之key(欄位決定一個key)value模式

-- isMaxLevel, updateStarDict, startLevel, endLevel function ShipService:getWeaponUpdateStarDictInner( shipDictId, weaponLevel, weaponIn

個數組合併成一個物件合併成一個

多個數組合併成一個 ver arrry=arr1.concat(arr2).concat(arr3).concat(arr4).concat(arr4) 兩個物件合併成一個。                 let para={name:'1'};            

JavaScripth5播放器video點選一個播放其他暫停

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <ti

遞迴演算法(求n的加法組合一個整數拆分成整數相加的形式 O(N)時間O(N)空間)

網上的多種解法比較複雜,本文用遞迴方法,22行程式碼搞定。時間和空間複雜度已經降到最低! 第三版:加入創作思路。 這個函式的主要功能就是輸出所有組合。既然是輸出所有的組合,那就意味著內部有一個遍歷所有組合的過程。既然是遍歷,而且是O(N)時間,那就說明這個遍歷是按照某種輸出次序,從“第一個組合”遍歷到