android给TextView设置部分文本颜色

转载请注明出处:https://blog.csdn.net/u011038298/article/details/85165244

import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout llContent = findViewById(R.id.ll_content);
        for (int i = 0; i < 6; i++) {
            TextView textView = new TextView(this);
            textView.setTextSize(14);
            textView.setGravity(Gravity.CENTER);
            textView.setTextColor(Color.WHITE);
            textView.setPadding(0, 20, 0, 20);
            setText(textView, i);
            llContent.addView(textView);
        }
    }

    /**
     * 方法描述:设置文本内容
     **/
    private void setText(TextView textView, int position) {
        String text = "注意:打雷下雨了,快回家收衣服吧!";
        switch (position) {
            case 0:
                // 根据文本下标,指定单个部分文字变色
                textView.setText(StringDesignUtil.getSpannableStringBuilder(text, Color.RED, 3, 5));
                break;
            case 1:
                // 指定关键字变色,并且给相对应的关键指定颜色
                textView.setText(StringDesignUtil.getSpannableStringBuilder(text, new String[]{"打雷", "收衣服"}, new int[]{Color.BLUE, Color.RED}));
                break;
            case 2:
                //  文本由关键字拼接而成,文本内容与字体颜色一一对应显示
                textView.setText(StringDesignUtil.getSpannableStringBuilder(
                        new String[]{"注意:", "打雷", "下雨了,快回家", "收衣服", "吧!"},
                        new int[]{Color.WHITE, Color.RED, Color.WHITE, Color.GREEN, Color.WHITE}));
                break;

            case 3:
                // 根据关键字,指定单个部分文字颜色
                textView.setText(StringDesignUtil.getSpanned(text, "打雷", "#e607bf"));
                break;
            case 4:
                // 指定关键字变色,并且给相对应的关键指定颜色
                textView.setText(StringDesignUtil.getSpanned(text,
                        new String[]{"打雷", "收衣服"},
                        new String[]{"#ff0000", "#185af0"}));
                break;
            case 5:
                // 文本由关键字拼接而成,文本内容与字体颜色一一对应显示
                textView.setText(StringDesignUtil.getSpanned(
                        new String[]{"注意:", "打雷", "下雨了,快回家", "收衣服", "吧!"},
                        new String[]{"#ffffff", "#ff0000", "#ffffff", "#185af0", "#ffffff",}));
                break;
        }
    }

}
import android.text.Html;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.style.ForegroundColorSpan;

/**
 * 类描述:字符串设计工具类
 */
public class StringDesignUtil {

    /**
     * 方法描述:根据文本下标,指定单个部分文字变色
     **/
    public static SpannableStringBuilder getSpannableStringBuilder(String text, int color, int startIndex, int entIndex) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        if (startIndex >= 0 && entIndex > startIndex && entIndex <= text.length()) {
            builder.setSpan(new ForegroundColorSpan(color), startIndex, entIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        return builder;
    }

    /**
     * 方法描述:指定关键字变色,并且给相对应的关键指定颜色
     **/
    public static SpannableStringBuilder getSpannableStringBuilder(String text, String texts[], int color[]) {
        SpannableStringBuilder builder = new SpannableStringBuilder(text);
        if (texts != null) {
            for (int i = 0; i < texts.length; i++) {
                String value = texts[i];
                if (!TextUtils.isEmpty(value) && text.contains(value)) {
                    if (color != null && color.length > i) {
                        int startIndex = text.indexOf(value);
                        int entIndex = startIndex + value.length();
                        if (entIndex > startIndex && entIndex <= text.length()) {
                            builder.setSpan(new ForegroundColorSpan(color[i]), startIndex, entIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                        }
                    }
                }
            }
        }
        return builder;
    }

    /**
     * 方法描述: 文本由关键字拼接而成,文本内容与字体颜色一一对应显示
     **/
    public static SpannableStringBuilder getSpannableStringBuilder(String text[], int color[]) {
        SpannableStringBuilder builder = new SpannableStringBuilder();
        if (text != null) {
            for (int i = 0; i < text.length; i++) {
                int startIndex = builder.length();
                builder.append(text[i]);
                if (color != null && color.length > i) {
                    builder.setSpan(new ForegroundColorSpan(color[i]), startIndex, builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        return builder;
    }

    /**
     * 根据关键字,指定单个部分文字颜色
     **/
    public static Spanned getSpanned(String text, String keyword, String colorValue) {
        return Html.fromHtml(text.replace(keyword, "<font color=" + colorValue + ">" + keyword + "</font>"));
    }

    /**
     * 指定关键字变色,并且给相对应的关键指定颜色
     **/
    public static Spanned getSpanned(String text, String keyword[], String colorValue[]) {
        if (keyword != null && colorValue != null) {
            for (int i = 0; i < keyword.length; i++) {
                if (colorValue.length > i) {
                    text = text.replace(keyword[i], "<font color=" + colorValue[i] + ">" + keyword[i] + "</font>");
                }
            }
        }
        return Html.fromHtml(text);
    }

    /**
     * 文本由关键字拼接而成,文本内容与字体颜色一一对应显示
     **/
    public static Spanned getSpanned(String keyword[], String colorValue[]) {
        StringBuffer buffer = new StringBuffer();
        if (keyword != null && colorValue != null) {
            for (int i = 0; i < keyword.length; i++) {
                if (colorValue.length > i) {
                    buffer.append("<font color=" + colorValue[i] + ">" + keyword[i] + "</font>");
                }
            }
        }
        return Html.fromHtml(buffer.toString());
    }

}

运行效果图:

android给TextView设置部分文本点击 

猜你喜欢

转载自blog.csdn.net/u011038298/article/details/85165244