最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android如何在一個(gè)TextView中設(shè)置不同字體大小、不同字體顏色封裝

 更新時(shí)間:2024年07月23日 10:14:08   作者:飄楊......  
在開發(fā)過程中遇到過這樣一種業(yè)務(wù),有很多單行文本字體,字符串中每一部分的字體樣式、大小、顏色都不相同,傳統(tǒng)的做法是放多個(gè)TextView以達(dá)到效果,這篇文章主要介紹了android在一個(gè)TextView中設(shè)置不同字體大小、不同字體顏色封裝,需要的朋友可以參考下

一、概述

  在開發(fā)過程中遇到過這樣一種業(yè)務(wù),有很多單行文本字體。字符串中每一部分的字體樣式、大小、顏色都不相同。傳統(tǒng)的做法是放多個(gè)TextView以達(dá)到效果。

  但是當(dāng)這個(gè)頁面中的這樣的元素非常多,且非常復(fù)雜的時(shí)候,就會(huì)出現(xiàn)頁面加載緩慢的問題(view加載=深度(遞歸)+平鋪),也就是頁面元素越多,層級(jí)越深加載速度越慢。

  此時(shí)如果能把本來要用四五個(gè)TextView才能完成的事情用一個(gè)TextView完成,這樣就能大大提高頁面加載速度。

  示例圖:

二、代碼示例(直接復(fù)制粘貼可用)

1.封裝類:ColorSizeTextView.kt

package com.yw.custommutilimageadapter.widget
import android.content.Context
import android.graphics.Color
import android.text.SpannableString
import android.text.Spanned
import android.text.style.AbsoluteSizeSpan
import android.text.style.ForegroundColorSpan
import android.util.AttributeSet
import android.util.Log
import androidx.appcompat.widget.AppCompatTextView
import com.yw.custommutilimageadapter.R
import java.lang.StringBuilder
/**
 * 可改變字顏色和字體大小的TextView
 * 即一個(gè)字體中可以有不同的字體顏色和字體大小
 */
class ColorSizeTextView(context: Context, attrs: AttributeSet?) :
    AppCompatTextView(context, attrs) {
    init {
        val a = context.obtainStyledAttributes(attrs, R.styleable.ColorSizeTextView)
        val textColor1 = a.getColor(R.styleable.ColorSizeTextView_textColor1, Color.BLACK)
        val textSize1 = a.getDimension(R.styleable.ColorSizeTextView_textSize1, 12f)
        val textContent1 = a.getString(R.styleable.ColorSizeTextView_textContent1)
        val textColor2 = a.getColor(R.styleable.ColorSizeTextView_textColor2, Color.BLACK)
        val textSize2 = a.getDimension(R.styleable.ColorSizeTextView_textSize2, 12f)
        val textContent2 = a.getString(R.styleable.ColorSizeTextView_textContent2)
        val textColor3 = a.getColor(R.styleable.ColorSizeTextView_textColor3, Color.BLACK)
        val textSize3 = a.getDimension(R.styleable.ColorSizeTextView_textSize3, 12f)
        val textContent3 = a.getString(R.styleable.ColorSizeTextView_textContent3)
        val isLayout = a.getBoolean(R.styleable.ColorSizeTextView_isLayout, false)
        Log.e("ColorSizeTextView:", "$textSize1,$textSize2,$textSize3")
        if (isLayout) {
            // 創(chuàng)建一個(gè)SpannableString對(duì)象
            val spannableString = SpannableString("$textContent1$textContent2$textContent3")
            // 設(shè)置第一部分文本的字體大小和顏色
            spannableString.setSpan(
                AbsoluteSizeSpan(textSize1.toInt()),
                0,
                textContent1?.length!!,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            spannableString.setSpan(
                ForegroundColorSpan(textColor1),
                0,
                textContent1?.length!!,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            //設(shè)置第二部分文本的字體大小和顏色
            spannableString.setSpan(
                AbsoluteSizeSpan(textSize2.toInt()),
                textContent1.length,
                textContent1.length + textContent2?.length!!,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            spannableString.setSpan(
                ForegroundColorSpan(textColor2),
                textContent1.length,
                textContent1.length + textContent2.length,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            //設(shè)置第三部分文本的字體大小和顏色
            spannableString.setSpan(
                AbsoluteSizeSpan(textSize3.toInt()),
                textContent1.length + textContent2.length,
                spannableString.length,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            spannableString.setSpan(
                ForegroundColorSpan(textColor3),
                textContent1.length + textContent2.length,
                spannableString.length,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            text = spannableString
            a.recycle()
        }
    }
    fun setSizeColorData(datas: ArrayList<ColorSizeData>) {
        val sbContent = StringBuilder()
        datas.forEachIndexed { index, colorSizeData ->
            sbContent.append(colorSizeData.content)
        }
        // 創(chuàng)建一個(gè)SpannableString對(duì)象
        val spannableString = SpannableString(sbContent.toString())
        var startIndex = 0
        var endIndex = 0
//        for (index in 0 until datas.size) {
//            endIndex += datas[index].content?.length!!
//            if (index > 0) {
//                startIndex += datas[index - 1].content?.length!!
//            }
//            Log.e("ColorSizeTextView:", "$startIndex,$endIndex")
//        }
        for (index in 0 until datas.size) {
            endIndex += datas[index].content?.length!!
            if (index > 0) {
                startIndex += datas[index - 1].content?.length!!
            }
            Log.e("ColorSizeTextView:", "$startIndex,$endIndex")
            Log.e("ColorSizeTextView---size:", "${datas[index].textSize}")
            // 設(shè)置第一部分文本的字體大小和顏色
            spannableString.setSpan(
                AbsoluteSizeSpan(datas[index].textSize),
                startIndex,
                endIndex,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
            spannableString.setSpan(
                ForegroundColorSpan(datas[index].textColor),
                startIndex,
                endIndex,
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
            )
        }
        text = spannableString
    }
    class ColorSizeData(
        var textColor: Int,
        var textSize: Int,
        var content: String?
    )
}

2.用法

tvContent.setSizeColorData(ArrayList<ColorSizeTextView.ColorSizeData>().apply {
            add(
                ColorSizeTextView.ColorSizeData(
                    Color.parseColor("#3700B3"),
                    PxUtils.sp2px(this@TextViewDifferentColorAndSizeActivity,14f),
                    "德瑪西亞啊"
                )
            )
            add(
                ColorSizeTextView.ColorSizeData(
                    Color.parseColor("#FF7201"),
                    PxUtils.sp2px(this@TextViewDifferentColorAndSizeActivity,12f),
                    "諾克薩斯33333333333333333"
                )
            )
            add(
                ColorSizeTextView.ColorSizeData(
                    Color.parseColor("#333333"),
                    PxUtils.sp2px(this@TextViewDifferentColorAndSizeActivity,10f),
                    "光輝女郎寒冰射手牛逼庫拉斯"
                )
            )
        })

到此這篇關(guān)于android在一個(gè)TextView中設(shè)置不同字體大小、不同字體顏色封裝的文章就介紹到這了,更多相關(guān)android TextView設(shè)置不同字體大小內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Flutter制作一個(gè)會(huì)飛的菜單

    利用Flutter制作一個(gè)會(huì)飛的菜單

    flutter中自帶了drawer組件,可以實(shí)現(xiàn)通用的菜單功能,所以本文將嘗試一下通過自定義動(dòng)畫來實(shí)現(xiàn)一個(gè)會(huì)飛的菜單,感興趣的可以了解一下
    2023-06-06
  • 詳解dex優(yōu)化對(duì)Arouter查找路徑的影響

    詳解dex優(yōu)化對(duì)Arouter查找路徑的影響

    dex簡單說就是優(yōu)化后的android版.exe。每個(gè)apk安裝包里都有。相對(duì)于PC上的java虛擬機(jī)能運(yùn)行.class,android上的Davlik虛擬機(jī)能運(yùn)行.dex。本文將著重介紹dex優(yōu)化對(duì)Arouter查找路徑的影響
    2021-06-06
  • Android頁面中可編輯與不可編輯切換的實(shí)現(xiàn)

    Android頁面中可編輯與不可編輯切換的實(shí)現(xiàn)

    這篇文章主要給大家介紹了關(guān)于在Android頁面中可編輯與不可編輯切換的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Android中Glide實(shí)現(xiàn)超簡單的圖片下載功能

    Android中Glide實(shí)現(xiàn)超簡單的圖片下載功能

    本篇文章主要介紹了Android中Glide實(shí)現(xiàn)超簡單的圖片下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 獲取Android簽名MD5的方式實(shí)例詳解

    獲取Android簽名MD5的方式實(shí)例詳解

    平時(shí)開發(fā),很多第三方需要配置應(yīng)用簽名,比如百度,高德地圖等,下面這篇文章主要給大家介紹了關(guān)于獲取Android簽名MD5的方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解

    Templates實(shí)戰(zhàn)之更優(yōu)雅實(shí)現(xiàn)自定義View構(gòu)造方法詳解

    本篇文章介紹如何利用Android Studio提供的Live Templates更優(yōu)雅實(shí)現(xiàn)自定義View的構(gòu)造方法,說句人話就是:簡化自定義View構(gòu)造參數(shù)模板代碼的編寫,實(shí)現(xiàn)自動(dòng)生成,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android Studio中導(dǎo)入JNI生成的.so庫的實(shí)現(xiàn)方法

    Android Studio中導(dǎo)入JNI生成的.so庫的實(shí)現(xiàn)方法

    這篇文章主要介紹了Android Studio中導(dǎo)入JNI生成的.so庫的實(shí)現(xiàn)方法的相關(guān)資料,這里不僅提供實(shí)現(xiàn)方案并提供了實(shí)現(xiàn)的方法,需要的朋友可以參考下
    2017-07-07
  • Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析

    Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析

    這篇文章主要為大家介紹了Flutter應(yīng)用程序?qū)崿F(xiàn)隱私屏幕示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Android組件之BroadcastReceiver廣播接收者

    Android組件之BroadcastReceiver廣播接收者

    這篇文章主要為大家介紹了Android組件之BroadcastReceiver廣播接收者實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Android 源碼淺析RecyclerView ItemAnimator

    Android 源碼淺析RecyclerView ItemAnimator

    這篇文章主要為大家介紹了Android 源碼淺析RecyclerView ItemAnimator,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論

台北县| 乡城县| 油尖旺区| 容城县| 江华| 岳阳市| 高邮市| 余姚市| 榆社县| 石台县| 泗水县| 阿图什市| 五台县| 潢川县| 竹北市| 班玛县| 噶尔县| 衡山县| 杨浦区| 邯郸县| 二手房| 余干县| 和林格尔县| 蛟河市| 广宗县| 佛坪县| 揭西县| 新龙县| 肥东县| 巴里| 万山特区| 嘉禾县| 汝城县| 普洱| 常山县| 沧州市| 馆陶县| 广水市| 胶南市| 咸阳市| 沁水县|