SpannableString SpannableImage实现特殊效果

设计效果要求是这样的,看了下我一脸蒙蔽,


SpannableString SpannableImage实现特殊效果_第1张图片
粘贴图片.png

想了下drawableleft实现不了,然后告诉设计妹子这个我们实现不了,可执著的妹子问我为什么实现不了,m站跟ios都能实现。于是我继续默默去找实现方案了。

我是知道SpannableString来实现一些特殊文本显示的,比如下划线 加黑 粗体 等特殊形式,但这些都仅仅局限于纯文本显示。而对于ImageSpan确实是不够了解,也是在项目代码中有类似得到启发

        SpannableStringBuilder builder = new SpannableStringBuilder("ezb uy " + name);
        if (CountryInfo.getCountryFlagByOrigin(originCountry) != 0) {
            if (isPrime) {
                //即使prime又有国家icon
                builder.setSpan(new ImageSpan(App.getInstance(), R.drawable.ic_black_prime_tag, ImageSpan.ALIGN_BASELINE), 0, 3, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                builder.setSpan(new ImageSpan(App.getInstance(), CountryInfo.getCountryFlagByOrigin(originCountry), ImageSpan.ALIGN_BASELINE), 4, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            } else {
                builder.setSpan(new ImageSpan(App.getInstance(), CountryInfo.getCountryFlagByOrigin(originCountry), ImageSpan.ALIGN_BASELINE), 0, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            }
        } else {
            if (isPrime) {
                builder.setSpan(new ImageSpan(App.getInstance(), R.drawable.ic_black_prime_tag, ImageSpan.ALIGN_BASELINE), 0, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            } else {
                builder.replace(0, 7, "");
            }
        }

代码是动态实现替换两个或者一个icon,能达到实现设计效果。

你可能感兴趣的:(SpannableString SpannableImage实现特殊效果)