Android(安卓)TextView
Android TextView
本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.csdn.net/Rozol/article/details/86582065
TextView 是Android中用处显示文本内容的基本控件.
以下是2019年1月, 按照官网文档 api28 写的文章.
文字加阴影
给Activity设置阴影时, 需要关闭硬件加速才有效果.
设置阴影用到以下属性
android:shadowDx="10" // x轴偏移量android:shadowDy="10" // y轴偏移量android:shadowRadius="5" // 阴影半径, 值越大越模糊android:shadowColor="#D81B60" // 阴影颜色
全部案例代码:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文字加阴影" android:textSize="30sp" android:shadowDx="10" android:shadowDy="10" android:shadowRadius="5" android:shadowColor="#D81B60"/>
效果:
其他效果代码:
<!-- 以下是效果 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="光圈效果" android:textSize="50sp" android:textColor="#ffffff" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="1" android:shadowColor="#D81B60"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="颜色混合效果" android:textSize="50sp" android:textColor="#55000000" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="1" android:shadowColor="#D81B60"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="浮雕效果" android:textSize="50sp" android:textColor="#895645" android:background="#895645" android:shadowDx="0.5" android:shadowDy="0.5" android:shadowRadius="2" android:shadowColor="#ccc"/>
关闭硬件加速
关闭整个硬件的硬件加速
<application android:hardwareAccelerated="true".... >
关闭Activity的硬件加速
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
关闭View的硬件加速 (只对当前的View关闭硬件加速)
setLayerType(View.LAYER_TYPE_SOFTWARE, null); // canvas.clipPath(); // 绘制圆角矩形须关闭硬件加速
文字自动滚动 (跑马灯效果)
要实现跑马灯效果, 控件必须获取焦点才能滚动.
设置跑马灯用到以下属性:
android:ellipsize="marquee"android:marqueeRepeatLimit="marquee_forever" // 限制滚动次数, marquee_forever永久滚动android:focusable="true" // 获取焦点android:focusableInTouchMode="true" // 触摸时获取焦点
ellipsize
用来设置省略效果, 除了跑马灯效果(marquee), 还有以下几个效果
android:ellipsize="start" // 头部省略, 用...代替android:ellipsize="end" // 尾部省略, 用...代替android:ellipsize="middle" // 中间省略, 用...代替android:ellipsize="none" // 不省略android:ellipsize="marquee" // 跑马灯效果
完整代码如下:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="我是一坨会滚动的文字!!!!!!!!!!!!!!!!!!!!!!" android:singleLine="true" android:textSize="30sp" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" />
效果:
AutoLink 自动识别链接
自动识别文本里的链接, 并能够被点击
代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这串字符串 http://luzhuo.me 是我的网站域名" android:autoLink="web"/>
效果图:
可以匹配的属性有:
android:autoLink="all" // 匹配所有(web|email|phone|map)android:autoLink="email"android:autoLink="map"android:autoLink="none" // 默认android:autoLink="phone"android:autoLink="web" // web Url
另外使用 textColorLink 属性, 可以修改链接的颜色:
android:textColorLink="@color/colorPrimaryDark"
再另外, 使用 linksClickable 属性, 可以修改链接是否可被点击 (默认为true, 可被点击)
android:linksClickable="false"
AutoSize 自动调节文字大小
能够根据控件的大小, 动态调整字体显示的大小, 适于特定的场景下.
代码如下:
<TextView android:layout_width="match_parent" android:layout_height="30dp" android:text="这是一段文字1" android:background="#10000000" /> <TextView android:layout_width="match_parent" android:layout_height="30dp" android:text="这是一段文字2" android:background="#20000000" android:autoSizeTextType="uniform"/>
效果图:
下面那段文字是使用了 autosize 的效果.
支持的属性有:
android:autoSizeTextType="uniform" // uniform 开启自动调节, 默认为noneandroid:autoSizeMaxTextSize="100sp" android:autoSizeMinTextSize="10sp" // 设置最大值和最小值可以限制缩放的范围android:autoSizeStepGranularity="5sp" // 粒度, 表示每次变动的最小单位android:autoSizePresetSizes="@array/autosize_text_sizes" // 预设尺寸, 对粒度进行多精度判定时使用
文本间距
letterSpacing 字间距
可以设置字体之间的间距, 其值可以是浮点数, 负值将会压缩字体(默认为0). 注意, 单位是em, 膨胀值为0.05
代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一段文字" android:letterSpacing="-0.1"/>
lineSpacing 行间距
行间距有 行间距 和 行间距倍数 两个属性, 行间距带有单位, 倍数不带单位, 两属性都为浮点数.
行间距 = 行高 * 行间距倍数
android:lineSpacingExtra="14.5sp"android:lineSpacingMultiplier="1.2"
Break strategy 段落布局
控制段落布局的策略.
代码如下:
<TextView android:layout_width="100dp" android:layout_height="wrap_content" android:text="1这是一段很长很长的texttexttexttexttext" android:breakStrategy="balanced"/>
主要有以下属性
android:breakStrategy="balanced" // 平衡策略, 尽量保持每段文本长度平衡android:breakStrategy="high_quality" // 高优化策略android:breakStrategy="simple" // 简单策略, 文本到达边界处再裁断
效果图:
elegantTextHeight 优化文字高度
使用 android:elegantTextHeight
属性, 可以优化文字上下的高度, 使其更美观(段落之间间距不变).
代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#20000000" android:text="这是一段很长很长的文字" android:elegantTextHeight="true"/>
效果如下:
除了增大上下高度的属性外, 还有一个属性 (android:includeFontPadding) 是减少上下高度.
includeFontPadding 的属性值为false, 表示不设置顶底留白.
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一段文字" android:background="#20000000" android:includeFontPadding="false"/>
效果图:
drawable 在文本里插入图片
可以在文本框内直接插入图片, 文字的大小与图片的大小互不影响.
代码如下:
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="下边有一张图片" android:textSize="35sp" android:drawableBottom="@mipmap/ic_launcher" android:drawablePadding="12sp"/>
另外附加的属性有:
android:drawablePadding="12sp" // 设置图片与文本的间隔
效果图:
还有以下类型的属性, 就不一一介绍了:
android:drawableTopandroid:drawableBottomandroid:drawableStartandroid:drawableEndandroid:drawableLeftandroid:drawableRight
drawableTint 文本图片着色
除了在文本内加入图片外, 还可以对图片进行着色, 并且有几个常用的着色模式可以选择.
着色的属性有:
android:drawableTint="@color/colorPrimaryDark" // 着什么颜色android:drawableTintMode="multiply" // 着色模式: add / multiply / screen / src_atop / src_in / src_over
过于着色模式, 也就是叠加模式, 可以看看我这篇文章, 我觉得已经写的比较详细了
代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="给图片着个色" android:drawableBottom="@mipmap/ic_launcher" android:drawableTint="@color/colorPrimaryDark" android:drawableTintMode="multiply"/>
效果图:
字体样式
我们可以按照需求, 使用系统的字体, 或者使用自己的字体, 以及对字体做一些常见的样式处理, 这里要注意, 字体的样式需要字体的支持, 如果字体本身就没有这个样式, 那么该样式就不能使用.
设置字体用到以下属性:
android:textStyle="bold" // 字体样式android:typeface="monospace" // 字体类型android:fontFamily="casual" // 使用的字体
字体样式 (textStyle) 的属性有:
android:textStyle="normal" // 默认android:textStyle="bold" // 粗体android:textStyle="italic" // 斜体android:textStyle="bold|italic" // 混合使用
字体类型 (typeface) 的属性有:
android:typeface="normal" // 默认android:typeface="sans" // 非衬线字体 android:typeface="serif" // 衬线字体android:typeface="monospace" // 等宽字体
衬线 和 非衬线 是罗马字母中的字体概念, 所以对字母起作用, 对中文没有作用.
另外 等宽 对中文也不起作用, 因为中文本来就是方方正正一块一块的, 而字母就不同了, 有大有小的.
效果如下:
字体 (fontFamily) 的属性主要是系统提供的一些字体:
这有点多, stackoverflow 上已经有人整理好了.
↓以下该小段内容来自 stackoverflow
Font | android:fontFamily | android:textStyle |
---|---|---|
Roboto Thin | sans-serif-thin | |
Roboto Light | sans-serif-light | |
Roboto Regular | sans-serif | |
Roboto Bold | sans-serif | bold |
Roboto Medium | sans-serif-medium | |
Roboto Black | sans-serif-black | |
Roboto Condensed Light | sans-serif-condensed-light | |
Roboto Condensed Regular | sans-serif-condensed | |
Roboto Condensed Medium | sans-serif-condensed-medium | |
Roboto Condensed Bold | sans-serif-condensed | bold |
Noto Serif | serif | |
Noto Serif Bold | serif | bold |
Droid Sans Mono | monospace | |
Cutive Mono | serif-monospace | |
Coming Soon | casual | |
Dancing Script | cursive | |
Dancing Script Bold | cursive | bold |
Carrois Gothic SC | sans-serif-smallcaps |
<TextView android:fontFamily="sans-serif" android:textStyle="bold" />
到此为止, 该小段内容一字未改.
字体 (fontFamily) 使用自己的字体:
如果想使用的字体, 系统又没提供, 这时就可以使用自己的字体.
首先在 res 里创建一个 font 文件夹, 把 ttf 字体文件放进去.
代码如下:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一段自定义字体" android:fontFamily="@font/nianxi"/>
效果图:
其他
ellipsize 省略部分字符串
当文字过长时, 对超出的文本进行的一种省略策略, 大家常用的功能, 就不多介绍了, 属性如下:
android:ellipsize="none" // 不做处理, 默认android:ellipsize="start" // 省略号在开头android:ellipsize="middle" // 省略号在中间android:ellipsize="end" // 省略号在结尾
android:gravity 内容位置
设置文本框内的内容位置, 常用功能就不废话了.
属性如下:
android:gravity="top" // 顶部android:gravity="bottom" // 底部android:gravity="center" // 居中android:gravity="center_horizontal" // 水平居中android:gravity="center_vertical" // 垂直居中android:gravity="left" // 左侧android:gravity="right" / 右侧android:gravity="start" // 开始处android:gravity="end" // 末尾处
lines 最多可显示的行数
android:lines="3"
singleLine 单行显示
被属性并未必真正遗弃, 有些属性必须使用该属性配合才能使用.
android:singleLine="true"
更多相关文章
- Android平台上面输入法遮挡问题-android:windowSoftInputMode属
- android 属性android:visibility及 view的setVisibility方法值的
- Android(安卓)ListView元素间隙线自定义渐变效果
- android animation
- 界面开发中布局属性全面剖析
- textview中加链接
- Android-ListView几个比较特别的属性
- AppCompat v21 — Android(安卓)5.0之前版本设备的Material Desi
- Android(安卓)TextView中文字通过SpannableString来设置超链接、