Android知识梳理安卓

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

2019-12-16  本文已影响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的学习使用,记录踩过的两个坑,方便以后用到的时候能迅速应对。

上一篇 下一篇

猜你喜欢

热点阅读