DevelopAndroid原生控件集中营android经验

1.TextView基础

2016-09-14  本文已影响457人  积木Blocks

目录

  1. 简介
  2. 常用属性
  3. 常见功能需求实现
  1. 常见问题
  2. 小技巧

1.简介


2.常用属性

NO 属性 作用
1 android:text 显示文本信息
2 android:textColor 设置文字颜色
3 android:textSize 设置文字大小
4 android:textStyle 设置文字字形
5 android:typeface 设置文字字体
6 android:singleLine 文字是否单行显示
7 android:lines 设置文本行数
8 android:maxLines 文字显示最大行数
9 android:minLines 设置文本显示最小行数
10 android:ellipsize 是否显示省略号(需要NO.5)
11 android:drawableStart 文字开头添加图片(适配RTL)
12 android:drawableEnd 文字末尾添加图片(适配RTL)
13 android:drawableTop 文字顶部添加图片
14 android:drawableBottom 文字底部添加图片
15 android:drawableLeft 文字左侧添加图片
16 android:drawableRight 文字右侧添加图片
17 android:drawableTint 给添加的图片着色(API level 23)
18 android:drawablePadding 图片的内边距(图片文字距离)
19 android:gravity 文本内容在控件中显示位置
20 android:shadowColor 文字阴影颜色
21 android:shadowDx 文字阴影x轴距离
22 android:shadowDy 文字阴影y轴距离
23 android:shadowRadius 文字阴影的半径
24 android:lineSpacingExtra 设置行间距
25 android:lineSpacingMultiplier 设置行间距的倍数
26 android:maxLength 限制显示的文本长度
27 android:ems 限制TextView宽度为N个字符长度
28 android:minEms 限制TextView宽度最短为N个字符长度
29 android:maxEms 限制TextView宽度最长为N个字符长度
30 android:textScaleX 设置字间距
31 android:height 设置文本区域的高度
32 android:maxHeight 设置文本区域的最大高度
33 android:minHeight 设置文本区域的最小高度
34 android:width 设置文本区域的宽度
35 android:maxWidth 设置文本区域的最大宽度
36 android:minWidth 设置文本区域的最小宽度

2.1 android:text
 <TextView ...android:text="自导自演的机器人" />
 <TextView ...android:text="@string/name" />
<resources>    
       <string name="name">自导自演的机器人</string>
</resources>

2.2 android:textColor
<TextView ...android:textColor="@color/colorPrimary" />
<?xml version="1.0" encoding="utf-8"?>
<resources>
       <color name="colorPrimary">#3F51B5</color>
</resources>

2.3 android:textSize
 <TextView ...android:textSize="16sp"/>

<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(默认)
![](https://img.haomeiwen.com/i1348484/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);

上一篇下一篇

猜你喜欢

热点阅读