强大的TextView

作为android中最基本的ui控件,TextView其实异常强大,但是我们开发者对它的使用或许只停留在最基本的方面。现在整理一些比较有用的功能。

图文混排

Span

SpannableString 也是字符串类型,TextView可以直接设置作为文本。
通过setSpan方法为制定下标区间的子字符串设置格式
方法setSpan(Object what,int start,int end,int flags)
第四个参数flags有四种属性值:

  • Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
  • Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
  • Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标
  • Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标

第一个参数Object what
通过设置第一个参数,可以为TextView设置前景色ForegroundColorSpan,背景色BackgroundColorSpan,相对大小RelativeSizeSpan,字体风格StyleSpan,图片ImageSpan,可点击ClickableSpan

SpannableString spannableString = new SpannableString("万丈高楼平地起");
RelativeSizeSpan sizeSpan01 = new RelativeSizeSpan(1.2f);
spannableString.setSpan(sizeSpan01, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

--------------------------------------------------------------------------------------------------------------
SpannableString spannableString = new SpannableString("为文字设置粗体、斜体风格");
StyleSpan styleSpan_B  = new StyleSpan(Typeface.BOLD);
StyleSpan styleSpan_I  = new StyleSpan(Typeface.ITALIC);
spannableString.setSpan(styleSpan_B, 5, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(styleSpan_I, 8, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setHighlightColor(Color.parseColor("#36969696"));
textView.setText(spannableString);

--------------------------------------------------------------------------------------------------------------

SpannableString spannableString = new SpannableString("在文本中添加表情(表情)");
Drawable drawable = getResources().getDrawable(R.mipmap.a9c);
drawable.setBounds(0, 0, 42, 42);
ImageSpan imageSpan = new ImageSpan(drawable);
spannableString.setSpan(imageSpan, 6, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString);

--------------------------------------------------------------------------------------------------------------
SpannableString spannableString = new SpannableString("为文字设置点击事件");
MyClickableSpan clickableSpan = new MyClickableSpan("http://www.jianshu.com/users/dbae9ac95c78");
spannableString.setSpan(clickableSpan, 5, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(Color.parseColor("#36969696")); 
textView.setText(spannableString);
//必须为TextView设置setMovementMethod方法,否则没有点击相应,至于setHighlightColor方法则是控制点击是的背景色。
class MyClickableSpan extends ClickableSpan {

    private String content;

    public MyClickableSpan(String content) {
        this.content = content;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setUnderlineText(false);   //控制是否让可点击文本显示下划线
    }

    @Override
    public void onClick(View widget) {
        Intent intent = new Intent(MainActivity.this, OtherActivity.class);
        Bundle bundle = new Bundle();
        bundle.putString("content", content);
        intent.putExtra("bundle", bundle);
        startActivity(intent);
    }
}

但是clickspan的点击事件的同时也会触发TextView的点击事件

Html.fromHtml()

可以用来解决一些字符转义的情况.比如字符串"集结号//Assembly-number——集合了多项内容的客户端",这里横杠是会转义。

TextView的炫酷效果

通过自定义span还可以实现一些特别的效果,包括颜色渐变,打印机效果等。参考精通Span 轻松玩转各种文本特效

字体对齐

某些情况下,TextView会发生字符不能填满整行,就换行的状况。参考不到100行代码实现左右对齐TextView的思路
修复后

强大的TextView_第1张图片
2018-12-11_124140.png

行间距

新增的lineSpacingExtra属性。图为lineSpacingExtra=10dp


强大的TextView_第2张图片
2018-12-11_124352.png

字体

        Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-ExtraBold.ttf");
        mTextView.setTypeface(tf);
强大的TextView_第3张图片
2018-12-11_132740.png

Autosizing

Autosizing 的带来的效果很简单,就是根据文字的内容,动态修改 TextSize ,而想要使用它,可以通过动态编码和静态的 layout-xml 布局属性的方式使用

  1. 动态编码,使用 setAutoSizeTextTypeUniformWithConfiguration 中提供的方法
  2. layout-xml 布局属性
    

参考文字太多?控件太小?试试 TextView 的新特性 Autosizing 吧!

你可能感兴趣的:(强大的TextView)