背景
这是一个编写代码的习惯。在多参数同样功能的方法会推荐使用在最多参数的方法内实现,详见代码解析;
最开始的代码
对textView 带有不同颜色和图片操作。
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
/***
* 该工具类对TextView 的文本颜色进行设置:
* 目前是前半部分以黄色为主,后半部分的主体Text以#FFFFFF为主
* written by Chris on 2022-07-14
*/
public class TextColorHandler {
static String colorString = "#FFB763"; // 换色
static String defaultColorString = "#FFFFFF";
public static SpannableStringBuilder handlerMessage(String front, String content,String splitInfo,String color) {
colorString = color;
return handlerMessage(front,content,splitInfo);
};
public static SpannableStringBuilder handlerMessage(String front, String content,String splitInfo) {
// 文本颜色区分
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
ForegroundColorSpan frontColor = new ForegroundColorSpan(Color.parseColor("#FFB763"));
ForegroundColorSpan backColor = new ForegroundColorSpan(Color.parseColor("#FFFFFF"));
ForegroundColorSpan frontColor = new ForegroundColorSpan(Color.parseColor(colorString));
ForegroundColorSpan backColor = new ForegroundColorSpan(Color.parseColor(defaultColorString));
int length = stringBuilder.length();
stringBuilder.append(front + splitInfo);
stringBuilder.setSpan(frontColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
length = stringBuilder.length();
stringBuilder.append(content);
stringBuilder.setSpan(backColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
colorString = "#FFB763";// 记得还原回去
return stringBuilder;
}
public static SpannableStringBuilder handleMessageWithPicture(String front, String content,Drawable drawable,String color) {
colorString = color;
return handleMessageWithPicture(front,content,drawable);
};
// 在文本中添加图片操作
public static SpannableStringBuilder handleMessageWithPicture(String front, String content, Drawable drawable) {
// 文本颜色区分
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
ForegroundColorSpan frontColor = new ForegroundColorSpan(Color.parseColor("#FFB763"));
ForegroundColorSpan backColor = new ForegroundColorSpan(Color.parseColor("#FFFFFF"));
ForegroundColorSpan frontColor = new ForegroundColorSpan(Color.parseColor(colorString));
ForegroundColorSpan backColor = new ForegroundColorSpan(Color.parseColor(defaultColorString));
int length = stringBuilder.length();
stringBuilder.append(front+" ");
stringBuilder.setSpan(frontColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
length = stringBuilder.length();
//添加图片
drawable.setBounds(drawable.getBounds().left, drawable.getBounds().top, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
stringBuilder.append(" ");//放置图片
stringBuilder.setSpan(span, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
stringBuilder.append(" "+content);
stringBuilder.setSpan(backColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
colorString = "#FFB763";// 记得还原回去
return stringBuilder;
}
}
优化后的代码
package im.zego.libimchat.view.utils;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.ImageSpan;
/***
* 该工具类对TextView 的文本颜色进行设置:
* 目前是前半部分以黄色为主,后半部分的主体Text以#FFFFFF为主
* written by Chris on 2022-07-14
*/
public class TextColorHandler {
static int colorString = Color.parseColor("#FFB763"); // 换色 为黄色
static int defaultColorString = Color.parseColor("#FFFFFF");
public static SpannableStringBuilder handlerMessage(String front, String content,String splitInfo,int color) {
// 文本颜色区分
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
ForegroundColorSpan frontColor = new ForegroundColorSpan(color);
ForegroundColorSpan backColor = new ForegroundColorSpan(defaultColorString);
int length = stringBuilder.length();
stringBuilder.append(front + splitInfo);
stringBuilder.setSpan(frontColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
length = stringBuilder.length();
stringBuilder.append(content);
stringBuilder.setSpan(backColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
return stringBuilder;
}
public static SpannableStringBuilder handlerMessage(String front, String content,String splitInfo) {
return handlerMessage(front, content, splitInfo, colorString);
}
public static SpannableStringBuilder handleMessageWithPicture(String front, String content,Drawable drawable,int color) {
// 文本颜色区分
SpannableStringBuilder stringBuilder = new SpannableStringBuilder();
ForegroundColorSpan frontColor = new ForegroundColorSpan(color);
ForegroundColorSpan backColor = new ForegroundColorSpan(defaultColorString);
int length = stringBuilder.length();
stringBuilder.append(front+" ");
stringBuilder.setSpan(frontColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
length = stringBuilder.length();
//添加图片
drawable.setBounds(drawable.getBounds().left, drawable.getBounds().top, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
stringBuilder.append(" ");//放置图片
stringBuilder.setSpan(span, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
stringBuilder.append(" "+content);
stringBuilder.setSpan(backColor, length, stringBuilder.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
return stringBuilder;
};
// 在文本中添加图片操作
public static SpannableStringBuilder handleMessageWithPicture(String front, String content, Drawable drawable) {
return handleMessageWithPicture(front, content, drawable,colorString);
}
}
关键:
public static SpannableStringBuilder handleMessageWithPicture(String front, String content, Drawable drawable) {
return handleMessageWithPicture(front, content, drawable,colorString);
}
整合到一块,代码就比较清晰。