Android开发手册TextView属性实现效果盘点

目录
  • 前言
  • 实践过程
    • 如何实现drawable的动画?
    • 图文混排

前言

前面小空带大家了解了TextView的属性,实践了一些自定义粗细,阴影效果,链接形文字。

但这还仅仅局限在用她本身的能力来实现的,那么她还能有什么花样呢?

我们先提出三个问题:

  • 例如有些时钟的显示,那如何让文本带有动画效果?
  • 例如如何让一个文本支持多种颜色和大小?
  • 那有没有统一快捷的方案?

我们带着疑问来看解决方案,大佬直接看最后开源项目。

实践过程

如何实现drawable的动画?

我们用帧动画举例,准备一个序列帧动画,放到drawable-xxhdpi下,在drawable文件夹下创建个动画xml(Android动画是个不小的知识点,后面我们学)配置好,然后在布局中引用。

test_tsxt_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item  android:drawable="@drawable/anim1"  android:duration="80" />
    <item  android:drawable="@drawable/anim2"  android:duration="80" />
    <item  android:drawable="@drawable/anim3"  android:duration="80" />
    <item  android:drawable="@drawable/anim4"  android:duration="80" />
    <item  android:drawable="@drawable/anim5"  android:duration="80" />
    <item  android:drawable="@drawable/anim6"  android:duration="80" />
    <item  android:drawable="@drawable/anim7"  android:duration="80" />
    <item  android:drawable="@drawable/anim8"  android:duration="80" />
    <item  android:drawable="@drawable/anim9"  android:duration="80" />
    <item  android:drawable="@drawable/anim10"  android:duration="80" />
    <item  android:drawable="@drawable/anim11"  android:duration="80" />
    <item  android:drawable="@drawable/anim12"  android:duration="80" />
    <item  android:drawable="@drawable/anim13"  android:duration="80" />
    <item  android:drawable="@drawable/anim14"  android:duration="80" />
</animation-list>

布局引用

<TextView
    android:id="@+id/test_text_anim"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableTop="@drawable/test_tsxt_anim"
    android:text="接着奏乐,接着舞" />

之后在代码中执行

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    testTextAnim = (TextView) findViewById(R.id.test_text_anim);
    Drawable[] drawables = testTextAnim.getCompoundDrawables();
    for (Drawable drawable : drawables) {
        if (drawable instanceof Animatable) {
            ((Animatable) drawable).start();
        }
    }
}

获取view之后利用getCompoundDrawables得到图片,用if判断是否为实现类Animatable的drawable,如下,虽然shape和selector也能用,但是只有animation的if (drawable instanceof Animatable) 才为true。

运行效果:

不过,有的同学会提问:这再怎么看和TextView动画也没关系啊,确实。这只是简单提了提,因为这方面有相关的三方库方便使用,所以详情看前辈的项目即可。感谢开源精神!

图文混排

Android官方对TextView的图文混排提供了支持,只需要用HTML语言即可,实现的效果很丰富。

private String testHtml = "<font color=\"#f0717e\">人</font>只要活得够<big>久</big></font>,就总能<big>遇上</big>被自己<font color=\"#f0717e\">蠢</font>到的那一天";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    testTextAnim = (TextView) findViewById(R.id.test_text_anim);
    testTextAnim.setText(Html.fromHtml(testHtml, Html.FROM_HTML_MODE_COMPACT));
}

运行效果:

上面是使用的html标签来实现的形式,其实还有一个就是利用SpannableString

testTextSpan1 = (TextView) findViewById(R.id.test_text_span1);
testTextSpan2 = (TextView) findViewById(R.id.test_text_span2);
SpannableString spannableString = new SpannableString("千重要,万重要,一技之长最重要");
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 2, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new BackgroundColorSpan(Color.parseColor("#00ff00")), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
testTextSpan1.setText(spannableString);
Spannable sp = new SpannableString("啊,这该死的高级感");
sp.setSpan(new AbsoluteSizeSpan(20, true), 0, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
sp.setSpan(new AbsoluteSizeSpan(12, true), 2, 3, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
sp.setSpan(new AbsoluteSizeSpan(30, true), 3, sp.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
sp.setSpan(new ForegroundColorSpan(Color.parseColor("#0000ff")), 2, sp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
testTextSpan2.setText(sp);

利用SpannableString包裹住字符串,里面有四个参数。

  • 参数1 可以是AbsoluteSizeSpan设置字体大小,也可以是ForegroundColorSpan设置字体颜色,还可以是BackgroundColorSpan设置文字背景颜色。
  • 参数2 想要修改字符串中起始index(start),
  • 参数3 是想要修改字符串中的结束index(end)。
  • 参数4 对参数2和参数3的补充,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE — 不包含两端start和end所在的端点

Spanned.SPAN_EXCLUSIVE_INCLUSIVE — 不包含端start,但包含end所在的端点

Spanned.SPAN_INCLUSIVE_EXCLUSIVE — 包含两端start,但不包含end所在的端点

Spanned.SPAN_INCLUSIVE_INCLUSIVE— 包含两端start和end所在的端点

AbsoluteSizeSpan有两个参数,参数1代表size大小,true代表是android的sp单位,false则是像素单位,建议用true。

开源项目

SuperTextView:一个很强大的控件元素,灵动多变,为你提供丰富多彩的功能,炫目效果即刻而至。

以上就是Android开发手册TextView属性实现效果盘点的详细内容,更多关于Android开发TextView属性的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android TextView中文字通过SpannableString设置属性用法示例

    本文实例讲述了Android TextView中文字通过SpannableString设置属性的方法.分享给大家供大家参考,具体如下: 在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. //创建一个 SpannableString对象 SpannableStri

  • Android使用TextView,设置onClick属性无效的解决方法

    Android在布局文件中为View提供了onClick属性,使用方法如下: <TextView android:id="@+id/user" android:layout_width="@dimen/px_171" android:layout_height="fill_parent" android:onClick="iconClickListener" android:clickable="true&qu

  • Android基于TextView属性android:ellipsize实现跑马灯效果的方法

    本文实例讲述了Android基于TextView属性android:ellipsize实现跑马灯效果的方法.分享给大家供大家参考,具体如下: Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize="marquee" 2.TextView必须单行显示,即内容必须超出TextView大小 3.TextView要获得焦点才能滚动 XML代码: android:ellipsize="marquee", andro

  • 浅析Android TextView常用属性

    [说明] TextView是用来显示文本的组件.以下介绍的是XML代码中的属性,在java代码中同样可通过 "组件名.setXXX()方法设置.如,tv.setTextColor(); [属性一] android:textColor="#000" 表示文字的颜色. [提示]颜色可以随便写一个"#000"形式的属性值,再通过点击左边显示行号旁边的颜色显示方块,弹出来颜色选择器对颜色进行选择.当设置的颜色为系统提供的Color资源内的颜色时,如"@c

  • 详解Android TextView属性ellipsize多行失效的解决思路

    本文介绍了Android TextView属性ellipsize多行失效的解决思路,分享给大家,具体如下: 多余文字显示省略号的常规做法 android:ellipsize="end" //省略号显示在末尾 android:ellipsize="middle" //省略号显示在中间 但是设置android:maxLines="2" 以后,ellipsize的值end有效,middle无效,本方法解决middle无效的问题 /** * 字符串显示到

  • Android开发手册TextView属性实现效果盘点

    目录 前言 实践过程 如何实现drawable的动画? 图文混排 前言 前面小空带大家了解了TextView的属性,实践了一些自定义粗细,阴影效果,链接形文字. 但这还仅仅局限在用她本身的能力来实现的,那么她还能有什么花样呢? 我们先提出三个问题: 例如有些时钟的显示,那如何让文本带有动画效果? 例如如何让一个文本支持多种颜色和大小? 那有没有统一快捷的方案? 我们带着疑问来看解决方案,大佬直接看最后开源项目. 实践过程 如何实现drawable的动画? 我们用帧动画举例,准备一个序列帧动画,放

  • Android开发手册TextView控件及阴影效果实现

    目录 实践过程 初识 文字阴影 TextView是Android中最简单也是最常见的控件.今天小空就带大家会会她. 实践过程 初识 经过前两篇常用属性和不常用属性的讲解,是不是有些懵了,不要慌,真实开发中用到的属性其实连五分之一都到不了. 我们先来创建个基本的文本控件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

  • Android开发手册shape属性和子属性使用说明

    目录 shape属性详解 子属性详解 shape属性详解 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:innerRadius="30dp" android:innerRadiusRatio="2" androi

  • Android开发中TextView 实现右上角跟随文本动态追加圆形红点

    在一个比较坑的需求里,一段文字右上角需要追加一个圆形红点.最右侧有个金额,红点动态随着文字移动,然后各种摆布局,一下午坑死我了.后来果断放弃.然后就想试试直接自定义view来实现这个需求. 最坑的就是效果下面的第一种情况和第二种情况,就是这两种情况给逼的 废话不说,开搞. 首先自定义个view 继承自 view 类 public class MyViewAndCircle extends View{ } 然后不用说了 ,直接飘红,必须要实现几个必要的方法了. public MyViewAndCi

  • Android开发中TextView文本过长滚动显示实现方法分析

    本文实例讲述了Android开发中TextView文本过长滚动显示实现方法.分享给大家供大家参考,具体如下: 项目中在使用TextView时,总会有因要显示的内容过多而需要我们进行处理的问题.我们第一时间想到的是TextView的android:ellipsize属性,比如 android:ellipsize="end",效果是在文字的尾部打三个小点. 但是这个属性要配合android:singLine="true"使用.通常来说,要实现尾端三个点的省略号形式是比较

  • Android开发TextvView实现镂空字体效果示例代码

    记录一下... 自定义TextView public class HollowTextView extends AppCompatTextView { private Paint mTextPaint, mBackgroundPaint; private Bitmap mBackgroundBitmap,mTextBitmap; private Canvas mBackgroundCanvas,mTextCanvas; private RectF mBackgroundRect; private

  • Android开发手册RatingBar星级评分控件实例

    目录 实践过程 初识 基本属性 点击事件 自定义样式 实践过程 初识 RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定. 通常应用场景是在用户评价那,如淘宝评价,打车订餐评价等等. 使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互. 基本属性 [android:isIndic

  • Android开发手册自定义Switch开关按钮控件

    目录 自定义Switch外观 布局样式 Drawable代码 自定义Switch外观 外观定制这块属于基操了,我们利用属性 android:track 和 android:thumb 定制 Switch 的背景图片和滑块图片,UI那能直接切图肯定做起来更快,此方式实现极其简单指定图片就行,所以今天我们实操的是自定义drawable的形式. 布局样式 <Switch android:layout_width="wrap_content" android:layout_height=

  • Android开发手册Chip监听及ChipGroup监听

    目录 Chip监听 ChipGroup监听 实例 效果展示 Chip监听 选中状态的监听:setOnCheckedChangeListener,该监听只有设置了checkable 属性为true或者使用了[filter/entry/choice]这三个style主题的时候才生效. 点击事件的监听:setOnClickListener 关闭按钮被点击的监听:setOnCloseIconClickListener Java myChip.setOnCloseIconClickListener(Vie

  • Android开发手册SeekBar拖动条使用实例

    目录 实践过程 常用属性 基本使用 自定义样式 自定义样式 实践过程 常用属性 因为Seekbar继承自ProgressBar,所以ProgressBar支持的XML属性SeekBar都适用. [android:max="100"]:设置该进度条的最大值[android:progress="50"]:设置该进度条的已完成进度值[android:progressDrawable="@drawable/icon_xinsui"]:自定义drawabl

随机推荐