美文网首页Android知识梳理安卓
安卓使用SpannableString打造多彩绚烂的TextVi

安卓使用SpannableString打造多彩绚烂的TextVi

作者: 笑对浮华 | 来源:发表于2019-12-16 14:09 被阅读0次

    安卓中可以用SpannableString打造一个独特的TextView,直接上实例:
    先来看一个用SpannableString实现的简单效果:

    页面布局

    这个text view中实现了五种效果,其中包含一个点击事件。代码如下:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
        private TextView mSpannableTextView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mSpannableTextView = findViewById(R.id.spannable_text);
    
            SpannableString span = new SpannableString("红色可点击斜体删除线下划线");
            //设置字体颜色
            span.setSpan(new ForegroundColorSpan(Color.RED),0,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //设置可点击
            span.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    Toast.makeText(MainActivity.this, "被点了", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void updateDrawState(TextPaint ds) {
                    super.updateDrawState(ds);
                    //默认的字体颜色时红色  在这里设置成黑色
                    ds.setColor(Color.BLACK);
                    //默认的有下划线  在这里去掉
                    ds.setUnderlineText(false);
                }
            },2,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //设置斜体
            span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),5,7,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //设置删除线
            span.setSpan(new StrikethroughSpan(),7,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //设置下划线
            span.setSpan(new UnderlineSpan(),10,13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //加入这句代码  点击事件才能生效
            mSpannableTextView.setMovementMethod(LinkMovementMethod.getInstance());
            mSpannableTextView.setText(span);
            //text view设置高亮颜色为透明 不设置的话 点击后会有浅绿色的背景  贼难看
            mSpannableTextView.setHighlightColor(Color.TRANSPARENT);
        }
    }
    

    我在使用过程中遇到了两个问题,在这里记录一下:
    问题一:点击事件不生效。
    解决方法就是在代码中加上这句代码:

    mSpannableTextView.setMovementMethod(LinkMovementMethod.getInstance());
    

    问题二:点击后会出现一个浅绿色背景。
    具体现象为,在模拟器上(Android 9 API 28)为粉红色,在真机上(Android 5.1 API 22)为浅绿色,如下:

    模拟器(Android 9 API 28)
    真机(Android 5.1 API 22)
    解决方法:这个跟SpannableString没有关系,是在text view中设置highlightcolor属性,将其设置为你想要的颜色,我这里设置为透明的。
    可以在布局中静态设置:
    android:textColorHighlight="#00000000"
    

    也可以在代码中动态设置:

    mSpannableTextView.setHighlightColor(Color.TRANSPARENT);
    

    总结:以上对安卓SpannableString的学习使用,记录踩过的两个坑,方便以后用到的时候能迅速应对。

    相关文章

      网友评论

        本文标题:安卓使用SpannableString打造多彩绚烂的TextVi

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