TextView

TextView是一个十分简单和基础的控件,相信大家使用TextView主要就是用来显示文字的,
而创建一个项目的时候,页面显示的就一个内容为Hello World 的 TextView。

一、TextView的常用属性

1.设置控件id

android:id="@+id/text_view"
android:id="@+id/textView"
设置该控件的id,不同xml页面可以有相同的id,但同一个页面不能用相同的id,ID随便取。
id有两种写法,一种是骆驼峰,就是第一个单词首字母小写,后面的单词都是首字母大写,
另一种就是都是小写,单词之间用 _ 符号来分开。两种写法,我更倾向于这一种,

2.设置控件的宽度

android:layout_width=“match_parent”             填充完父布局的宽度,就是父布局的有多宽
android:layout_width=“wrap_content”           自适应布局,看内容的大小而定
android:layout_width=“10dp”            固定值:如10dp,控件固定10dp

3.设置控件的高度

android:layout_height=“match_parent”            填充完父布局的高度,就是父布局的有多高
android:layout_height=“wrap_content”           自适应布局,看内容的大小而定
android:layout_height=“10dp”            固定值:如10dp,控件固定10dp

4.设置背景

设置TextView控件的背景,可以是颜色,也可以是图片
android:background="#CCCCCC"
android:background="@color/bg_text_color"
android:background="@drawable/bg_text"

5.设置内边距

android:padding=“12dp”        设置四个边为12的内边距
android:padding="@dimen/text_padding"
设置textView的内边距,上下左右都是上面的值,下面有单独设一边
android:paddingTop=“12dp”
android:paddingBottom=“12dp”
android:paddingRight=“12dp”
android:paddingLeft=“12dp”
android:paddingEnd=“12dp”
android:paddingStart=“12dp”
这里的左右和前后是区别的,左右就一定是左右,但是前不一定是左,如果系统语言是从左到右:如中文,那么前就代表左,如果系统语言是从右开始 :那么前就代表右边,所以如果左右内边距一样,推荐使用left和right,但如果不一样,推荐使用start和end,不然从右到左显示的手机,会出现偏差

6.设置外边距

android:margin=“12dp”
android:marginTop=“12dp”
android:marginBottom=“12dp”
android:marginStart=“12dp”
android:marginEnd=“12dp”
android:marginLeft=“12dp”
android:marginRight=“12dp”
设置外边距,与内边距差不多,但他们区别在于,如果是自适应大小的控件,那么设置内边距后,控件会大很多,但字体还是一样大小,监听触发的面积大了,而外边距就是,控件大小不变,只是本控件与其他控件相隔12dp的距离,请注意内边距和外边距的使用

7.设置文字在控件的位置

android:gravity=“center”
android:gravity=“center_horizontal”
android:gravity=“center_vertical”
android:gravity=“end”
android:gravity=“start”
android:gravity=“left”
android:gravity=“right”
android:gravity=“right|bottom”
若控件大,但字体小的时候,该属性就发挥作用了,一个大面积的控件,字体显示的地方分别可以
左上,左中,左下,中上,居中,中下,右上,右中,右下9个位置

8.设置文字内容、字体大小、字体颜色、样式

android:text=“This is TextView” 用于该控件显示的内容
android:textSize=“12sp” 用于控制该控件文字的大小,单位使用sp,同时AS建议字体大小不要低于12sp
android:textColor="#FFFFFF" 用于设置字体的颜色
上三种可以使用value文件夹里面的值文件,字符串、颜色值、与大小值
android:text="@string/hello_test"
android:textSize="@dimen/text_12_sp"
android:textColor="@color/textTitle"
android:textStyle=“bold” 粗
android:textStyle=“normal” 正常
android:textStyle=“italic” 斜体

9.设置Ems

只有在宽度为自适应: android:layout_width="wrap_content"的时候才会生效
android:minEms=“10”
TextView一行最少有10个字符的宽度
如果少于10个字符,TextView的宽度也为10个字符的宽度
android:maxEms=“3”
TextView一行最长只有3个字符的宽度

10.设置最小最大宽高度

android:minHeight=“100dp”
android:minWidth=“100dp”
android:maxHeight=“400dp”
android:maxWidth=“400dp”

11.设置文本最多1行显示

android:maxLines=“1”
允许TextView最多只有一行,不管你TextView有多大,他都是只显示一行文字

12.设置文本最多输入x个字符

android:maxLength=“10”
允许TextView最多只有10个字符,超出不显示。

13.设置文本是否自动换行

默认是fasle,默认会自动换行
android:singleLine=“true” 内容只显示在一行上
android:singleLine=“false” 内容超出一行的最长限度会自动切换到下一行

二、设置间距与行距

正常大小

设置间距

android:letterSpacing=“0.5”
0为默认,每增加0.1都有明显的变化

设置行距额外行距

android:lineSpacingExtra=“10dp”
设置两行之间的间距为:默认高度 + 10dp

若为负数 ,则为减少行距
android:lineSpacingExtra="-6dp"

设置行距倍数

android:lineSpacingMultiplier=“2”
但只是设置默认行距的倍数,和android:lineSpacingExtra无关

设置行距倍数与额外行距

若没有android:lineSpacingExtra="10dp"属性,则总行距为默认的行距倍数
但若有android:lineSpacingExtra=“10dp”,则总行距为10dp + 默认行距的倍数

间距与行距的动态写法

        textView.letterSpacing = 0.2f //设置间距//设置行距//第一个为add,增加的额外行距,对应android:lineSpacingExtra属性//第二个为mult,增加的倍数,对应android:lineSpacingMultiplier属性textView.setLineSpacing(10f, 2f)

三、android:ellipsize的使用

超出省略的使用

原文字:一二三四五六七八九十十一十二十三十四十五十六十七十八十九二十二十一二十二二十三
(一到二十三的数)
android:ellipsize 与 android:singleLine配合使用
省略在前面,内容从最后开始往前,前面省略
android:singleLine=“true”
android:ellipsize=“start”

省略在中间,内容前面从一开始,内容后面从最后开始,中间省略
android:singleLine=“true”
android:ellipsize=“middle”

省略在末尾,内容从前面开始,后面省略
android:singleLine=“true”
android:ellipsize=“end”

最简单的单行末尾省略
android:singleLine=“true”
不需要ellipsize都会末尾省略

当要求两行以上的内容进行省略的时候,就无法使用singleLine了,这是就需要maxLines。
android:ellipsize 属性配合android:maxLines使用,这时候,ellipsize只能设置尾部超出省略,其他几个属性没作用的。
android:maxLines=“2”
android:ellipsize=“end”

判断内容是否省略

通过内部的getEllipsisCount()方法来获取省略的字数,如果是0,就是没有省略,大于0就是有省略

 val button : Button = findViewById(R.id.btn)val textView : TextView = findViewById(R.id.text)button.setOnClickListener {//getEllipsisCount()传入的是textView的行数,返回的是省略的字符个数,没有省略返回0,有就返回个数val ellipsizeCount = textView.layout.getEllipsisCount(textView.lineCount - 1)if(ellipsizeCount == 0){//处理没有省略的逻辑Toast.makeText(this, "没有省略", Toast.LENGTH_SHORT).show()} else if(ellipsizeCount > 0){Toast.makeText(this, "超出省略了,且超出了${ellipsizeCount}个字符", Toast.LENGTH_SHORT).show()//处理有省略的逻辑}}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"app:layout_constraintBottom_toTopOf="@id/text"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/text"android:layout_width="200dp"android:layout_height="wrap_content"android:background="@color/teal_200"android:ellipsize="end"android:maxLines="2"android:text="一二三四五六七八九十十一十二十三十四十五十六十七十八十九二十二十一二十二二十三"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@id/btn" /></androidx.constraintlayout.widget.ConstraintLayout >

跑马灯

必须设置单行
android:singleLine=“true”
同时设置跑马灯属性
android:ellipsize=“marquee”
在设置为无限滚动
android:marqueeRepeatLimit=“marquee_forever”
同时动态设置
textView.setSelected(true);

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/text"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/teal_200"android:textSize="30sp"android:ellipsize="marquee"android:singleLine="true"android:marqueeRepeatLimit="marquee_forever"android:text="一二三四五六七八九十十一十二十三十四十五十六十七十八十九二十二十一二十二二十三二十四二十五二十六二十七二十八二十九三十"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout >
val textView : TextView = findViewById(R.id.text)
textView.isSelected = true

四、带图片的TextView

注意:下面的绿色都是TextView的大小,因为图片是包含在TextView里面的,所以,整个绿色的矩形都是可以监听的。TextView的周围显示图片是通过drawableBottomCompat等标签设置的。

    <TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="你好,友人"android:background="@color/teal_200"app:drawableBottomCompat="@drawable/ic_processbuild"app:drawableEndCompat="@drawable/ic_processbuild"app:drawableTopCompat="@drawable/ic_processbuild"app:drawableStartCompat="@drawable/ic_processbuild"app:layout_constraintBottom_toTopOf="@id/text_two"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />

动态写法,在Kotlin中这样使用:

 val textView : TextView = findViewById(R.id.text)textView.text = "你好,友人"val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_processbuild, null)drawable?.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight) //设置他的大小textView.setCompoundDrawables(drawable, null, drawable, drawable)

五、Span设置定制文本

有SpannableString和SpannableStringBuilder两种可以对字符串进行文本定制,可以对整个字符串设置,也可以对字符串内的某几个字符进行设置

SpannableString可以定制文本,但不能增加文本,和String一样,创建好就不能再加
SpannableStringBuilder可以定制文本,也可以增加文本,使用append()方法增加文字
SpannableStringBuilder与Spannable的setspan()方法的有4个参数,第一个就是Span子类,主要是用于设置定制内容,第二个是开始定制的字符,(包含),第三个是结束定制的字符(不包含),最后一个就是Flag,Flag主要用于SpannableStringBuilder

1.Flag

Flag 包含前面 包含后面
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
Spanned.SPAN_EXCLUSIVE_INCLUSIVE
Spanned.SPAN_INCLUSIVE_INCLUSIVE

对于SpannableString来说,都是一样的,设置第start个字符到第end个字符的文本,包含第start个字符,不包含第end个字符
对于SpannableStringBuilder来说,除了上面的特性之外,还有一个,就是在该span设置的start前或end后插入字符,是否也该设置Span。看上面的表就知道,设置第一个Flag时,在前面和后面插入,都不会设置,而下面三个Flag是有设置的。
举例说明:

        val textView : TextView = findViewById(R.id.text)val string = "这是一段比较简单的字符串"val sp = SpannableStringBuilder(string)//这里是简单的将前面5个字符设置为天蓝色sp.setSpan(ForegroundColorSpan(Color.CYAN), 0, 5, Spanned.SPAN_INCLUSIVE_INCLUSIVE)//然后这里是在第0个字符那插入你好,但因为我们使用了Spanned.SPAN_INCLUSIVE_INCLUSIVE//这个Flag,所以在他前面插入内容,所插入的内容包含在内,同样被设为天蓝色sp.insert(0, "你好")//这里是简单的将第8到12的字符设置为红色//注意,这里显示的第8个,并不是string的第八个,而是将前面的你好插入之后的第八个字符sp.setSpan(ForegroundColorSpan(Color.RED), 8, 12, Spanned.SPAN_INCLUSIVE_INCLUSIVE)//然后这里是在第0个字符那插入你好,但因为我们使用了Spanned.SPAN_INCLUSIVE_INCLUSIVE//这个Flag,所以在他前面插入内容,所插入的内容包含在内,同样被设为红色sp.insert(12, "你好")textView.text = sp

若还是看不懂我的表达(表达不太好,嘿)的兄弟可以一个一个的试一下,你就知道什么意思了
但下面的内容,每次最好只使用下面的一个sp.insert()

 val textView : TextView = findViewById(R.id.text)val string = "左边五个字上边五个字右边五个字下边五个字"val sp = SpannableStringBuilder(string)//前后不包括 -> (0, 5)sp.setSpan(ForegroundColorSpan(Color.CYAN), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//sp.insert(0, "你好")//sp.insert(5, "你好")//前包括,后不包括 -> [5, 10)sp.setSpan(ForegroundColorSpan(Color.BLUE), 5, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE)//sp.insert(5, "你好")//sp.insert(10, "你好")前不包括,后包括 -> (10, 15]sp.setSpan(ForegroundColorSpan(Color.RED), 10, 15, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)//sp.insert(10, "你好")//sp.insert(15, "你好")前后都包括 -> [15, 20]sp.setSpan(ForegroundColorSpan(Color.GREEN), 15, 20, Spanned.SPAN_INCLUSIVE_INCLUSIVE)//sp.insert(15, "你好")//sp.insert(20, "你好")textView.text = sp

讲完Flag后,我们讲讲不同的Span,主要是设置不同的样式,以下是个人认为最常用的内容,但并不是全部,有需要的请去谷歌开发者文档查看所有Span

         val textView2 : TextView = findViewById(R.id.text_two)val str = "背景颜色字体颜色删除线下划线绝对大小像素绝对大小DP这个是图片相对大小下标正常上标加粗斜体粗斜";val span = SpannableString(str)//用于设置背景颜色span.setSpan(BackgroundColorSpan(Color.YELLOW), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)//用于设置文本颜色span.setSpan(ForegroundColorSpan(Color.RED), 4, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//删除线span.setSpan(StrikethroughSpan(), 8, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//设置下划线span.setSpan(UnderlineSpan(), 11, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//设置字体的绝对大小,单个参数是像素,两个参数的,第二个为是否为dp值,选择false则也是为像素span.setSpan(AbsoluteSizeSpan(100), 14, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)span.setSpan(AbsoluteSizeSpan(30, true), 20, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//设置图片val img = ResourcesCompat.getDrawable(resources, R.drawable.ic_processbuild, null)img?.let {img.setBounds(0, 0, img.intrinsicWidth, img.intrinsicHeight)span.setSpan(ImageSpan(it), 26, 31, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)}//相对大小span.setSpan(RelativeSizeSpan(3.0f), 31, 35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//下标,数学公式span.setSpan(SubscriptSpan(), 35, 37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//上标,数学公司的幂次方span.setSpan(SuperscriptSpan(), 39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//字体样式加粗、斜体、加粗斜体span.setSpan(StyleSpan(Typeface.BOLD), 41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)span.setSpan(StyleSpan(Typeface.ITALIC), 43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)span.setSpan(StyleSpan(Typeface.BOLD_ITALIC), 45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)//设置文本textView2.text = spanval textView3 : TextView = findViewById(R.id.text_three)val str2 = "打电话  发邮件  上百度  发短信  发彩信  打开地图" //中间分隔两个空格字符val span2 = SpannableString(str2)//URL超链接span2.setSpan(URLSpan("tel:13713445967"), 0, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //打电话span2.setSpan(URLSpan("mailto:webmaster@google.com"), 5, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //发邮件span2.setSpan(URLSpan("http://www.baidu.com"), 10, 13, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上网页span2.setSpan(URLSpan("sms:4155551212"), 15, 18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //发短信 sms:或者smsto:span2.setSpan(URLSpan("mms:4155551212"), 20, 23, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //发彩信 mms:或者mmsto:span2.setSpan(URLSpan("geo:38.899533,-77.036476"), 25, 29, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //打开地图//需要添加才可以使用URL超链接textView3.movementMethod = LinkMovementMethod.getInstance()textView3.text = span2

Android - 最基础的控件TextView相关推荐

  1. Android开发基础之控件EditText

    目录 一.基础属性 二.在提示文本旁添加图片 三.获取EditText内容 四.监听事件 五.制作登录界面 一.基础属性 1.id 设置组件id 2.layout_width 宽度 3.layout_ ...

  2. Android开发基础之控件CheckBox

    目录 一.基础属性 二.自定义样式 1.去掉CheckBox的勾选框 2.自定义背景颜色 3.自定义勾选框的背景图片 三.监听事件 一.基础属性 1.layout_width 宽度 2.layout_ ...

  3. Android开发基础之控件WebView

    WebView可以实现如下功能: 加载本地assets文件夹下的html文件 wedview.loadUrl("file:///android_asset/test.html"); ...

  4. Android中的基础控件TextView、Button、ImageView、EditText、ProgressBar

    文章目录 1 Android中的基础控件 1.1 控件的通用属性 2 TextView 2.1 TextView的继承关系 2.2 TextView的常用属性 3 EditText 3.1 常用属性 ...

  5. android基础入门控件详解(3)

    以下所有控件都只显示本控件代码,运行效果图会在原基础上添加. 一.TextView(文本框): TextView用来向用户显示文本,这是最基本的视图. <TextViewandroid:id=& ...

  6. Android开发 第2课 控件TextView、Plain Text、ImageView、 Button、ImageButton以及点击事件

    控件 TextView 显示文本 Plain Text 输入文本 //将布局xml文件引入到activity当中setContentView(R.layout.activity_main);<! ...

  7. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)

    猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...

  8. Android中设置显示文本,Android文本显示控件-TextView属性详解

    android:autoLink //设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) andr ...

  9. Android歌词显示控件TextView自定义

    1. 音乐播放,音乐播放,音乐播放放入服务中,那么App 退入后台音乐也可以播放 2. 歌词显示控件TextView自定义:    使用控件TextView,  为什么不用Listview,歌词不可以 ...

最新文章

  1. 用树莓派从0开始打造属于自己的服务器
  2. error undefined reference to __android_log_print
  3. 【arduino】继续用arduino玩CyberPi童芯派之DA音频信号播放
  4. 模拟实现strstr
  5. Linux CentOS服务启动
  6. Spring Boot(三) 将war文件部署到tomcat 、 Thymeleaf示例
  7. cf体验服_CF手游体验服_穿越火线枪战王者体验服申请_12月版本
  8. 信息学奥赛一本通 1181:整数奇偶排序 | OpenJudge NOI 1.10 06:整数奇偶排序
  9. java io 机器名_java IO最让初学者误解的取名方式
  10. 给 Android 应用开发者的十个建议
  11. 11x 程序员专属 TapTap 代码编辑器主题
  12. Chrome浏览器乱码问题
  13. 浙江省乡村快递寄件数据分析-快递100百递指数
  14. 从COVID-19大流行中汲取哪些教训?10种方法帮CIO预防下一次危机
  15. 【系统集成项目管理工程师】项目范围管理
  16. 网页跳转(APP内/浏览器)
  17. 根据经纬度坐标计算实际距离
  18. 小米手机更改默认应用
  19. 十分钟安装一套即时通讯 IM 私有云
  20. RFID射频识别电子标签基础知识汇总

热门文章

  1. java常见的注解之 @Documented、@Component
  2. 平面设计中的审美协众信息技术
  3. golang gob
  4. 安装驱动的inf文件资料,通过inf文件改变硬盘外观
  5. Windows快速打开命令及快捷键
  6. [buuctf]刷题记录web
  7. 完全开源的代码生成器之code-generator
  8. Springboot项目多模块打包jar移动到指定目录,docker打jar包构建镜像部署并运行
  9. EMC-电感选择不当引起的RE辐射超标
  10. X10SRA以及X10SRA-F主板启动针脚在先马黑洞机箱上的插法