美文网首页
TextView 左右对齐

TextView 左右对齐

作者: 肖散 | 来源:发表于2019-01-21 13:10 被阅读0次
    效果
    范例.png
    参考方案

    针对该方案的不足进行修改

    1. 可以设置文本对齐数量

    2. 全部插入缩小的文本,避免由于放大造成显示问题

    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));
    
    

    相关文章

      网友评论

          本文标题:TextView 左右对齐

          本文链接:https://www.haomeiwen.com/subject/nqhcjqtx.html