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元”");
效果图