Android TextView的一些特殊用法

来源:互联网 发布:报纸排版软件 adobe 编辑:程序博客网 时间:2024/04/29 14:28

  我们在Android应用开发的过程当中,经常会遇到改变TextView中部分字体的某些属性,以达到强调或者提示的作用。这些属性包括字体的颜色、大小、粗细等。遇到这种情况你该如何处理呢?


  TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的设置。.通常情况下,我们是将一个字符串直接放置在TextView.setText()的参数里面的,这样只能单纯的输出字符串。如果要给TextView加上特殊的文本效果,就要使用SpannableString这个类了。 用法如下:
  1、 new一个SpannableString对象,并将需要处理的字符串作为其构造函数的参数传入。

String orign = “万里长城万里空,百世英雄百世梦![清] 张廷玉”;
SpannableString span = new SpannableString(orign );

  2、调用SpannableString的setSpan(Object what, int start, int end, int flags)方法进行设置。 参数说明:
what:需要设置的样式,目前Android提供了如下可设置的样式:

  • 1、BackgroundColorSpan 背景色

    span.setSpan(new BackgroundColorSpan(Color.GREEN), 0, spanText.length(),
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 2、ClickableSpan 文本可点击,有点击事件

  • 3、ForegroundColorSpan 文本颜色(前景色)

    span.setSpan(new ForegroundColorSpan(Color.BLUE), 6, spanText.length(),
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 4、MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)

    int length = orign .length();
    //模糊(BlurMaskFilter)
    MaskFilterSpan maskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, Blur.OUTER));
    span.setSpan(maskFilterSpan, 0, length - 10, Spannable.
    SPAN_INCLUSIVE_EXCLUSIVE);
    //浮雕(EmbossMaskFilter)
    maskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{1,1,3}, 1.5f, 8, 3));
    span.setSpan(maskFilterSpan, length - 10, length, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

   PS: 如果浮雕效果不明显,把字体设置大点后可以看得清晰些。需要其他效果可以继承MaskFilter来自定义。

  • 5、MetricAffectingSpan 父类,一般不用
  • 6、RasterizerSpan 光栅效果

    span.setSpan(new StrikethroughSpan(), 0, 7, Spannable.
    SPAN_INCLUSIVE_EXCLUSIVE);

  • 7、StrikethroughSpan 删除线(中划线)

    span.setSpan(new StrikethroughSpan(), 0, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 8、SuggestionSpan 相当于占位符
    相当于占位符,一般用在EditText输入框中。当双击此文本时,会弹出提示框选择一些建议(推荐的)文字,选中的文本将替换此占位符。在输入法上用的较多。
    PS::API 14新增,暂无示例。

  • 9、UnderlineSpan 下划线

    span.setSpan(new UnderlineSpan(), 0, spanText.length(),
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 10、AbsoluteSizeSpan 绝对大小(文本字体)

    span.setSpan(new AbsoluteSizeSpan(20, true), 0, spanText.length(),
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

   PS::把字体大小设置大点,效果更佳。

  • 11、DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。

    //基于基线对齐
    DynamicDrawableSpan drawableSpan =
    new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
     @Override
     public Drawable getDrawable() {
      Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
      d.setBounds(0, 0, 50, 50);
      return d;
    }
    };
    //基于底部对齐
    DynamicDrawableSpan drawableSpan2 = new DynamicDrawableSpan(
    DynamicDrawableSpan.ALIGN_BOTTOM) {
     @Override
     public Drawable getDrawable() {
      Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
      d.setBounds(0, 0, 50, 50);
      return d;
    }
    };
    span.setSpan(drawableSpan, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    span.setSpan(drawableSpan2, 7, 8, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 12、ImageSpan 图片(PS::和DynamicDrawableSpan差别不大)

  • 13、RelativeSizeSpan 文本字体相对大小(PS::相对大小的比例是基于当前文本字体大小)

    //参数proportion:比例大小
    span.setSpan(new RelativeSizeSpan(2.5f), 3, 4,
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 14、ReplacementSpan 父类,一般不用

  • 15、ScaleXSpan 基于x轴缩放

    //参数proportion:比例大小
    span.setSpan(new ScaleXSpan(3.8f), 3, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 16、StyleSpan 字体样式:粗体、斜体等

    //Typeface.BOLD_ITALIC:粗体+斜体
    span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 3, 7,
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 17、SubscriptSpan 下标(数学公式会用到)

    spanText.setSpan(new SubscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 18、SuperscriptSpan 上标(数学公式会用到)

    span.setSpan(new SuperscriptSpan(), 6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 19、TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)

    //若需自定义TextAppearance,可以在系统样式上进行修改
    span.setSpan(new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium),
    6, 7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    PS: 系统还提供了相关值TextAppearance_Small, TextAppearance_Large等。如有需要可在以上样式基础上修改。

  • 20、TypefaceSpan 文本字体

    //若需使用自定义字体,可能要重写类TypefaceSpan
    span.setSpan(new TypefaceSpan(“monospace”), 3, 10,
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

  • 21、URLSpan 文本超链接

    span.setSpan(new URLSpan(“http://blog.csdn.net/RockyWDY/article/details/72888552“), 10, spanText.length(),
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    //让URLSpan可以点击
    mTextView.setMovementMethod(new LinkMovementMethod());

start:开始的位置,0表示第一个字符
end:结束的位置,不包括end,改变的长度是end-start
flags:表示替换的位置是否会影响开头和结尾,试了一下,感觉没什么效果。
  3、把这个span对象传给TextView.setText()方法的参数就好了。

TextView mTextView = new TextView(this);
mTextView.setText(span);

原创粉丝点击