Android控件之TextView

零、前言

1.今天总结一下TextView

2.TextView在View家族的地位是:源码行数11000+,可以说是个大类

3.TextView直接继承自View,EditText,Button,CheckBox都是它的后代

4.TextView可以说常用至极,所以掌握TextView是必要的

5.一些细小偏僻的点在这里综合一下,以便用时好找


一、拿一个Hello World的TextView来举例

1、代码中设置字体大小,自选尺寸
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_DIP,20);//dp
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_PT,20);//磅
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_SP,20);//sp---默认
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_PX,20);//像素
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_MM,20);//毫米
mIdTv.setTextSize(TypedValue.COMPLEX_UNIT_IN, 20);//英寸

2.append()添加字符串
mIdTv.append("--toly"); //Hello World--toly
mIdTv.append("--toly", 0, 3); //Hello World--t

3.单行显示、行尾省略
mIdTv.setSingleLine();
mIdTv.setEllipsize(TextUtils.TruncateAt.END);//结尾省略...
或
android:singleLine="true"
android:ellipsize="end"

4.跑马灯效果
android:focusable="true"
android:focusableInTouchMode="true"
android:ellipsize="marquee"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"

5.SpannableString的简单使用

textview富文本,这里简单实现下图效果:

SpannableString
mIdTv.setText(seal());

private SpannableString seal() {
    SpannableString ssSeal = new SpannableString("水杯特价¥50¥3点击购买");
    //图片
    Drawable drawable = getResources().getDrawable(R.mipmap.cup);
    drawable.setBounds(0,0,200,200);
    ImageSpan imageSpan = new ImageSpan(drawable);
    ssSeal.setSpan(imageSpan, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //斜体
    StyleSpan styleSpan_I  = new StyleSpan(Typeface.ITALIC);
    ssSeal.setSpan(styleSpan_I, 2, 3, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //粗体
    StyleSpan styleSpan_B  = new StyleSpan(Typeface.BOLD);
    ssSeal.setSpan(styleSpan_B, 3, 4, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //背景
    BackgroundColorSpan bgSpan = new BackgroundColorSpan(Color.parseColor("#662B90F5"));
    ssSeal.setSpan(bgSpan, 7, 9, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //下划线
    ssSeal.setSpan(new StrikethroughSpan(), 4,7, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //颜色
    ForegroundColorSpan colSpan = new ForegroundColorSpan(Color.CYAN);
    ssSeal.setSpan(colSpan, 9, 13, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //字大小
    ssSeal.setSpan(new RelativeSizeSpan(2f), 7, 9, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    //下划线
    ssSeal.setSpan(new UnderlineSpan(), 9,13, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
    return ssSeal;
}

6.阴影效果
阴影.png
android:shadowColor="#DAA0F8"
android:shadowDx="5"
android:shadowDy="5"
android:shadowRadius="10"

7.字间距、行间距
字间距.png
android:letterSpacing="0.5"//设置字间距
android:lineSpacingExtra //设置行间距,如”8dp”。
android:lineSpacingMultiplier//设置行间距倍数,如“1.2”,即为1.2倍行间距

8.设置textView抗锯齿
mIdTv.getPaint().setAntiAlias(true);或
mIdTv.getPaint().setFlags(Paint.ANTI_ALIAS_FLAG);

9.添加HTML
Spanned spanned = Html.fromHtml(
        "<b>toly:</b> link to" +
                "<a href=\"http://www.toly1994.com\">Endless</a> ");
mIdTv.setMovementMethod(LinkMovementMethod.getInstance());//激活链接
mIdTv.setText(spanned);
HTML.png

10.自定义字体!!!

准备字体ygyxsziti2.0.ttf

在项目main文件夹里创建assets文件夹

自定义字体.png
mIdTv.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/ygyxsziti2.0.ttf"));//设置字体
mIdTv.setText("张风捷特烈");
11.设置可选择
android:textIsSelectable="true"
可选择.png
12.设置图片填充文字内部
mIdTv.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/ygyxsziti2.0.ttf"));//设置字体
Bitmap bitmap = BitmapFactory.decodeResource(
        getResources(),
        R.mipmap.bg4);
Shader shader = new BitmapShader(
        bitmap,
        Shader.TileMode.REPEAT,
        Shader.TileMode.REPEAT);
mIdTv.getPaint().setShader(shader);
mIdTv.setText("张风捷特烈");
设置贴图.png

本文由张风捷特烈原创,转载请注明

更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94

张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

你的喜欢与支持将是我最大的动力

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

Android源码解析-仿今日头条PagerSlidingTabStrip滑动页面导航效果

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/lyhhj/article/details/48...

4862
来自专栏Android干货

调整屏幕显示亮度

3057
来自专栏Android点滴积累

Android TextView 添加下划线的几种方式

1. 将要处理的文字写到一个资源文件,如string.xml(使用html用法格式化)

3877
来自专栏向治洪

Palette状态栏颜色提取,写的不错就分享了

Palette 说Palette之前先说下前面提到的Pager。ViewPager是什么大家应该都是知道的了,一般ViewPager、xxxTabStrip...

2356
来自专栏Flutter入门到实战

教你如何最快写出酷炫的dialog对话框

1662
来自专栏向治洪

SpannableString 给TextView添加不同的显示样式

TextView是用来显示文本的,有时需要给TextView中的个别字设置为超链接,或者设置个别字的颜色、字体等,那就需要用到Spannable对象,可以借助S...

2277
来自专栏肖蕾的博客

自定义View之签到足迹控件

1164
来自专栏一“技”之长

Android开发之FrameLayout布局

        在Android开发中,FrameLayout是所有布局容器中最简单的一种,在前边博客中有介绍关于Android开发中线性布局LinearLay...

1271
来自专栏向治洪

Android Material Design之Toolbar与Palette实践

前言 我们都知道Marterial Design是Google推出的全新UI设计规范,如果对其不太了解的可以看下:Material design非官方中文指导手...

2328
来自专栏Android开发与分享

【Android】强大的SpannableStringBuilder

49612

扫码关注云+社区

领取腾讯云代金券