TextView ellipsize
配合 maxLines 使用,超出部分省略号表示,跑马灯等效果
marquee 使用跑马灯效果时记得设置 tvMarquee.setSelected(true); 需要注意不要抢了其他控件的焦点
marqueeRepeatLimit 限制滚动次数可以设置 marquee_forever 或 1
Combining ellipsize=marquee and maxLines=1 can lead to crashes. Use singleLine=true instead
Combining ellipsize and maxLines=1 can lead to crashes on some devices. Earlier versions of lint recommended replacing singleLine=true with maxLines=1 but that should not be done when using ellipsize.
译:将 ellipsize和maxLines = 1组合在一起会导致某些设备崩溃。 早期版本的lint建议用maxLines = 1替换singleLine = true,但在使用ellipsize时不应该这样做。
TextView maxEms
em 是一个印刷排版的单位,表示字宽的单位。 em 字面意思为:equal M(和 M 字符一致的宽度为一个单位)简称 em。ems 是 em 的复数表达。
使用 ellipsize 时,想要限制宽度不能用 maxLength 用 maxEms
TextView setMargins
1
2
3
4
5
6
| //得到父容器的 LayoutParams 如果xml中没有该控件就要 new 的方式, RelativeLayout 是父容器类型,也可能是其他类型
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) child.getLayoutParams();
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
//设置的值是 px ,有需要可以 dp 转 px
layoutParams.setMargins(DisplayUtils.dp2px(mContext, 15), 0, 0, 0);
child.setLayoutParams(layoutParams);
|
使用 MarginLayoutParams 设置
1
2
3
4
5
6
7
8
9
10
11
| private void setMargins(View child, int left, int top, int right, int bottom) {
ViewGroup.LayoutParams params = child.getLayoutParams();
ViewGroup.MarginLayoutParams marginParams;
if (params instanceof ViewGroup.MarginLayoutParams) {
marginParams = (ViewGroup.MarginLayoutParams) params;
} else {
marginParams = new ViewGroup.MarginLayoutParams(params);
}
marginParams.setMargins(0, 0, 0, 0);
child.setLayoutParams(marginParams);
}
|
TextView Drawables
可以用 setCompoundDrawables 或 setCompoundDrawablesWithIntrinsicBounds
setCompoundDrawables 画的 drawable 的宽高是按 drawable.setBound() 设置的宽高,所以必须先设置 drawable 的宽高,在调用该方法,才会显示
setCompoundDrawablesWithIntrinsicBounds 是画的 drawable 的宽高是按 drawable 固定的宽高,即:用 getIntrinsicWidth() 与 getIntrinsicHeight() 获得
1
2
| Drawable drawable = ContextCompat.getDrawable(context, R.drawable.***);
textview.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
|
1
2
3
| Drawable drawable = ContextCompat.getDrawable(context, R.drawable.***);
rightDrawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
textview.setCompoundDrawables(null, null, drawable, null);
|
TextView Html 标签
可以修改个别文字样式
1
2
3
4
5
6
7
8
9
| Spanned message = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
message = Html.fromHtml(getString(R.string.cdata_text),Html.FROM_HTML_MODE_LEGACY);
}else {
message = Html.fromHtml(getString(R.string.cdata_text));
}
text.setText(message);
//设置 a 标签点击跳转
text.setMovementMethod(LinkMovementMethod.getInstance());
|
在 string.xml 用 或者直接转义 Html 标签
1
| <string name="cdata_text"><![CDATA[1.<a href="https://kalaqiae.com/">kalaqiae<a><br/>2.<b>bold</b> 3.<font color = "#FF0000">color text</font>]]></string>
|
如果要获取到 a 标签的点击事件(比如想自定义跳转页面) textview 需要设置 android:autoLink=“web” 然后用另外写事件
阴影
android:shadowColor 阴影颜色 android:shadowDx 阴影的水平偏移量 android:shadowDy 阴影的垂直偏移量 android:shadowRadius 阴影的范围
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:shadowColor="#FF000000"
android:shadowDx="5"
android:shadowDy="5"
android:shadowRadius="3"
android:text="阴影效果"
android:textColor="#FFF"
android:textSize="30sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:shadowColor="#CCCCCC"
android:shadowDx="0.5"
android:shadowDy="0.5"
android:shadowRadius="2"
android:text="浮雕效果"
android:textColor="#FF000000"
android:textSize="30sp" />
|
行间距
android:lineSpacingExtra 设置行间距 android:lineSpacingMultiplier 设置行间距的倍数
1
2
3
4
5
6
| <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:lineSpacingMultiplier="1.2"
android:lineSpacingExtra="4dp" />
|