自定义TextView 设置指定文本颜色为指定颜色

package com.zx.mocab.views;

import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.util.AttributeSet;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;

/**
 * 自定义TextView 设置指定文本颜色为指定颜色
 */
public class CustomTextView extends AppCompatTextView {

    public CustomTextView(@NonNull Context context) {
        super(context);
    }

    public CustomTextView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setTextWithHighlights(String text, String defaultColor, String highlightColor, String... highlights) {
        SpannableString spannableString = new SpannableString(text);

        // 首先将整个文本设置为默认颜色(例如深灰色#222222)
        spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(defaultColor)), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        // 遍历所有需要高亮的文本片段,并将它们设置为高亮颜色(例如深红色#D71818)
        for (String highlight : highlights) {
            int startIndex = text.indexOf(highlight);
            while (startIndex >= 0) {
                int endIndex = startIndex + highlight.length();
                spannableString.setSpan(new ForegroundColorSpan(Color.parseColor(highlightColor)), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                startIndex = text.indexOf(highlight, endIndex);
            }
        }

        setText(spannableString);
    }
}

调用方法

布局

    <com.zx.mocab.views.CustomTextView
        android:id="@+id/tv_custom_one"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="32sp"
        android:layout_marginLeft="32dp"
        android:layout_marginRight="32dp"
        android:textColor="#ff222222"
        android:layout_marginTop="120dp"
        android:layout_centerInParent="true"/>

java代码

     CustomTextView tv_custom_one = findViewById(R.id.tv_custom_one);



   // 设置文本和高亮颜色
        this. tv_custom_one.setTextWithHighlights("用 1元、5元、10元 购买 “13元” 的物品", "#222222",
                "#D71818", "1元、5元、10元", " “13元”");

效果图

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值