效果
范例.png参考方案
针对该方案的不足进行修改
-
可以设置文本对齐数量
-
全部插入缩小的文本,避免由于放大造成显示问题
public class TextCenterFormat {
/**
* 对显示的字符串进行格式化 比如输入:出生年月 输出结果:出正生正年正月
*/
private static String formatStr(String str, int insetSize) {
if (TextUtils.isEmpty(str)) {
return "";
}
int len = str.length();
String insert = "";
for (int i = 0; i < insetSize; i++) {
insert = insert + "正";
}
StringBuilder sb = new StringBuilder(str);
for (int i = len - 1; i > 0; i--) {
sb.insert(i, insert);
}
return sb.toString();
}
/**
* 对文本进行左右对齐
*
* @param str
* @param maxSize 显示对齐数量
* @return
*/
public static SpannableString formatText(String str, int maxSize) {
if (TextUtils.isEmpty(str)) {
return null;
}
int len = str.length();
SpannableString spannableString = new SpannableString(str);
if (len == 1) {
return spannableString;
}
if (len >= maxSize) {
spannableString.setSpan(new RelativeSizeSpan((float) (maxSize * 1.0) / len), 0, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return spannableString;
}
str = formatStr(str, maxSize - 2);
double multiple = (maxSize - len) * 1.0 / ((len - 1) * (maxSize - 2));
spannableString = new SpannableString(str);
for (int i = 1; i < str.length(); i = i + maxSize - 1) {
spannableString.setSpan(new RelativeSizeSpan((float) multiple), i, i + maxSize - 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), i, i + maxSize - 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
}
return spannableString;
}
}
使用例子 显示4个字
binding.textView2.setText(TextCenterFormat.formatText("服服服",4));
binding.textView3.setText(TextCenterFormat.formatText("服服",4));
binding.textView4.setText(TextCenterFormat.formatText("服服服服",4));
binding.textView5.setText(TextCenterFormat.formatText("服服服服服服",4));
网友评论