1.TextView基础

目录

  1. 简介
  2. 常用属性
  3. 常见功能需求实现
  • TextView点击效果
  • TextView的XML本地化数据交换格式
  • TextView实现富文本
  • TextView不等文字对齐
  • TextView实现文字换行
  1. 常见问题
  2. 小技巧

1.简介

  • 向用户展示文本信息,并且用户可以选择是否编辑文本
  • 一个TextView是一个完整的文本编辑器,但是它默认不支持编辑,如需编辑,请使用其子类EditText

2.常用属性

NO属性作用
1android:text显示文本信息
2android:textColor设置文字颜色
3android:textSize设置文字大小
4android:textStyle设置文字字形
5android:typeface设置文字字体
6android:singleLine文字是否单行显示
7android:lines设置文本行数
8android:maxLines文字显示最大行数
9android:minLines设置文本显示最小行数
10android:ellipsize是否显示省略号(需要NO.5)
11android:drawableStart文字开头添加图片(适配RTL)
12android:drawableEnd文字末尾添加图片(适配RTL)
13android:drawableTop文字顶部添加图片
14android:drawableBottom文字底部添加图片
15android:drawableLeft文字左侧添加图片
16android:drawableRight文字右侧添加图片
17android:drawableTint给添加的图片着色(API level 23)
18android:drawablePadding图片的内边距(图片文字距离)
19android:gravity文本内容在控件中显示位置
20android:shadowColor文字阴影颜色
21android:shadowDx文字阴影x轴距离
22android:shadowDy文字阴影y轴距离
23android:shadowRadius文字阴影的半径
24android:lineSpacingExtra设置行间距
25android:lineSpacingMultiplier设置行间距的倍数
26android:maxLength限制显示的文本长度
27android:ems限制TextView宽度为N个字符长度
28android:minEms限制TextView宽度最短为N个字符长度
29android:maxEms限制TextView宽度最长为N个字符长度
30android:textScaleX设置字间距
31android:height设置文本区域的高度
32android:maxHeight设置文本区域的最大高度
33android:minHeight设置文本区域的最小高度
34android:width设置文本区域的宽度
35android:maxWidth设置文本区域的最大宽度
36android:minWidth设置文本区域的最小宽度
2.1 android:text
  • 基本使用
    添加一个String
 <TextView ...android:text="自导自演的机器人" />
  • 正确使用
  • 将需要提示的文字,一律写在res-values-string.xml中,这样是为了国际化,方便统一的修改。
 <TextView ...android:text="@string/name" />
  • string.xml文件
<resources>    
       <string name="name">自导自演的机器人</string>
</resources>
2.2 android:textColor
  • 基本使用
    添加一个RGB值
    <TextView ...android:textColor="#3F51B5" />
    
  • 正确使用
  • 将需要设置的颜色,一律写在res-values-colors中,方便统一的修改。
<TextView ...android:textColor="@color/colorPrimary" />
  • colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
       <color name="colorPrimary">#3F51B5</color>
</resources>
2.3 android:textSize
  • 基本使用
    添加一个大于0的数值,单位为sp
 <TextView ...android:textSize="16sp"/>
  • 正确使用
    • 将需要设置的文字大小,一律写在res-values-dimen中,这样是为了国际化,方便统一的修改。

<TextView …android:textSize=”@dimen/tv_size”/>

- dimen.xml

<resources>

<dimen name=”activity_horizontal_margin”>16dp</dimen>
<dimen name=”activity_vertical_margin”>16dp</dimen>
<dimen name=”tv_size”>16sp</dimen>
</resources>

- 如果不明白sp和dp的请参考:[两分钟理解Android中SP与DP的区别-技术小黑屋](http://droidyue.com/blog/2016/09/05/dp-vs-sp-in-android/)
---
##### 2.4 android:textStyle
 - 修改字形(**支持组合使用:bold|italic**)
    - normal(默认)
![](//upload-images.jianshu.io/upload_images/1348484-c48a18296675828a.png)
    - italic(斜体)
![](//upload-images.jianshu.io/upload_images/1348484-9ff311532ef3da91.png)
    - bold(粗体)
![](//upload-images.jianshu.io/upload_images/1348484-b2f9d41923cce13d.png)

---
##### 2.5 android:typeface
 - 修改字体
   - normal
   - sans
   - serif
   - monospace

---
##### 2.6 ~~android:singleLine~~
 - 是否单行显示,默认是多行显示

android:singleLine=”false”

![](//upload-images.jianshu.io/upload_images/1348484-d6d9e0a9636ebd3e.png)
 - 防止文字过多而造成布局挤压问题

android:singleLine=”true”

![](//upload-images.jianshu.io/upload_images/1348484-523d2b4cab496f5b.png)

- 已过时,被**android:maxLines="1"**取代

---
##### 2.7 android:lines
- 文本显示固定的行数
- 比如设置数值为2 

android:lines=”2″

如果文本行数小于2,强制显示2行,不足部分补空白
如果文本行数大于2,强制显示2行,多余部分省略

---
##### 2.8 android:maxLines
 - 添加大于等于0的整数
   - 如果是0,则无显示
   - 如果是1,等同于**android:singleLine="true"**,但是没有省略符号

android:maxLines=”1″

![](//upload-images.jianshu.io/upload_images/1348484-efb604798fffa248.png)
---
##### 2.9 android:minLines
- 文本最小显示行数
  - 不足部分补空白
  - 多余部分不处理
---
##### 2.10 android:ellipsize
- 有五个选项
  - end 在末尾省略
  - start 在开始省略
  - middle 在中间省略
  - marquee 走马灯(不建议使用,cpu消耗比较大)
  - none 不省略(默认模式)

---
##### 2.11~2.18 
   - 添加图片,以及设置图片内边距 
    android:drawableTop="@mipmap/ic_launcher"
    android:drawableBottom="@mipmap/ic_launcher"
    android:drawableLeft="@mipmap/ic_launcher"
    android:drawableRight="@mipmap/ic_launcher"
    android:drawablePadding="@dimen/activity_horizontal_margin"

- 效果图
![](http://upload-images.jianshu.io/upload_images/1348484-52123b723e0bdf25.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

- 可以用来简化布局层次

---
##### 2.19 android:gravity
- 支持组合使用

|属性|含义|
|:---:|:---:|
|center|文字居中|
|center_vertical|文字垂直居中|
|center_horizontal|文字水平居中|
|left|文字左对齐|
|right|文字右对齐|
|top|文字顶部对齐|
|bottom|文字底部对齐|
|start|文字开头对齐(适配RLT)|
|end|文字结尾对齐(适配RLT)|
|clip_vertical|沿着对象的垂直轴裁剪|
|clip_horizontal|沿着对象的水平轴裁剪|
|fill|fill_vertical和fill_horizontal,拉伸充满控件|
|fill_horizontal|left和right,横向拉伸充满控件|
|fill_vertical|top和bottom,纵向拉伸充满控件|
---
##### 2.20~2.23

- 添加文字阴影效果

<TextView …
android:shadowColor=”@color/colorAccent”
android:shadowDx=”100″
android:shadowDy=”-10″
android:shadowRadius=”2″/>

- 效果图
![](http://upload-images.jianshu.io/upload_images/1348484-fa4d8e48219a52c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


- android:shadowColor设置阴影效果颜色
- android:shadowDx是阴影效果距离控件的x轴偏移量,单位是px,可以为负值
- android:shadowDy是阴影效果距离控件的y轴偏移量,单位是px,可以为负值
- android:shadowRadius是阴影效果的半径,单位是px,不宜数值过大

---
#### 3.常见功能需求实现
   |NO|需求|
   |:---:|:---:|
   |1|TextView点击效果|
   |2|TextView的XML本地化数据交换格式|
   |3|TextView实现富文本|
   |4|TextView不等文字对齐|
   |5|TextView实现文字换行|
---
##### 3.1 TextView点击效果
- 建立drawable文件

<?xml version=”1.0″ encoding=”utf-8″?>
<selector xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:state_selected=”true” android:color=”@color/colorAccent” />
<item android:state_focused=”true” android:color=”@color/colorAccent” />
<item android:state_pressed=”true” android:color=”@color/colorAccent” />
<item android:color=”@color/colorPrimary”/>
</selector>

- 将drawable应用于textColor属性

<TextView …android:textColor=”@drawable/select_tv_text”/>

---
##### 3.2 TextView的XML本地化数据交换格式
- 有时候TextView的文本内容需要动态的改变显示,比如显示“1个机器人”
![](http://upload-images.jianshu.io/upload_images/1348484-b038721598f80deb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 你可能会这样

int robotNum=3;
tvDemo.setText(robotNum+”本书”);

- 上面的方法虽然不会出错,但是**Android Studio**还是会给你提出警告
- 正确方式

int robotNum=3;
tvDemo.setText(getString(R.string.robot_num,robotNum));

<string name="robot_num">%d个机器人</string>
- 参考文章
  - [《Android中String资源文件的可变参数设定(String.format()的详细用法)》lance_小超](http://www.jianshu.com/p/9855d6a7596d)
---
##### 3.3 TextView实现富文本
- 有时候单一的文字,已经满足不了你的需求,你可能需要在某一段文字的第一个字设置为红色,第二个字设置为蓝色,或者又为第三个字添加点击效果,那么请参考如下文章.

- 参考文章
  - [《【Android】强大的SpannableStringBuilder》带心情去旅行 ](http://www.jianshu.com/p/f004300c6920)
  - [《用SpannableString打造绚丽多彩的文本显示效果》   码农小阿飞](http://www.jianshu.com/p/84067ad289d2)

---
##### 3.4 TextView不等文字对齐
- 有时候你需要实现不同的文字字数对齐的效果
![](http://upload-images.jianshu.io/upload_images/1348484-1a0af6feecef236c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- [《TextView-不等字数两端对齐》](http://www.jianshu.com/p/d8f50509b1e9)

---
##### 3.5 TextView实现文字换行
- 在string中加入换行符  **\n**

---
#### 4.常见问题
  |NO|问题|
   |:---:|:---:|
   |1|java代码添加drawable无效|

---
##### 4.1 java代码添加drawable无效
- 在XML中我们可以直接通过**android:drawableLeft**添加一张图片,而在java代码中我们可以使用如下方法,添加一张图片

setCompoundDrawables(@Nullable Drawable left, @Nullable Drawable top,
@Nullable Drawable right, @Nullable Drawable bottom)

 - 错误示例代码,这样根本无法显示图片

tv.setCompoundDrawables(getResources().getDrawable(R.mipmap.ic_launcher),null,null,null);

 - 错误原因,没有给图片设置宽高
 - 正确写法

Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable,null,null,null);

    原文作者:积木Blocks
    原文地址: https://www.jianshu.com/p/aa13e6f78304
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞