安卓中可以用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 5.1 API 22)
解决方法:这个跟SpannableString没有关系,是在text view中设置highlightcolor属性,将其设置为你想要的颜色,我这里设置为透明的。
可以在布局中静态设置:
android:textColorHighlight="#00000000"
也可以在代码中动态设置:
mSpannableTextView.setHighlightColor(Color.TRANSPARENT);
总结:以上对安卓SpannableString的学习使用,记录踩过的两个坑,方便以后用到的时候能迅速应对。
网友评论