原文链接:http://www.jianshu.com/p/4e7d7a08fc7e
这篇文章记录一下TextView中不常用的几个方法,直接上动图:
#####setTextIsSelectable(boolean selectable):
setTextIsSelectable(boolean selectable)对应xml中的android:textIsSelectable,用于声明TextView中的内容是否可被选中。
setTextIsSelectable截图:
#####setSelectAllOnFocus(boolean selectAllOnFocus):
setSelectAllOnFocus(boolean selectAllOnFocus)对应xml中的android:selectAllOnFocus,用于声明TextView/EditText实例在获取焦点后是否选中全部内容。
setSelectAllOnFocus截图:
#####setHighlightColor(@ColorInt int color):
setHighlightColor(@ColorInt int color)对应xml中的android:textColorHighlight,用于声明TextView中被选中内容的高亮背景色。
setHighlightColor截图:
#####链接相关: setAutoLinkMask(int mask)
setAutoLinkMask(int mask)对应xml中的android:autoLink,用于声明TextView实例可识别的链接类型。
setLinkTextColor(@ColorInt int color)
setLinkTextColor(@ColorInt int color)对应xml中的android:textColorLink,用于设置TextView实例中链接的颜色。
setLinksClickable(boolean whether)
setLinksClickable(boolean whether)对应xml中的android:linksClickable,用于设置TextView实例中的链接是否可点击/点击是否执行对应动作。
#####setTextScaleX(float size)
setTextScaleX(float size)对应xml中的android:textScaleX,用于设置TextView实例中文字横向拉伸倍数。
setTextScaleX截图(黄色高亮区域):
#####设置TextView高度为行数相关: setMinLines(int minlines)
setMinLines(int minlines)对应xml中的android:minLines,用于设置TextView最小高度为指定行高度。
setMaxLines(int maxlines)
setMaxLines(int maxlines)对应xml中的android:maxLines,用于设置TextView最大高度为指定行高度。
setLines(int lines)
setLines(int lines)对应xml中的android:lines,用于设置TextView精确高度为指定行高度。
设置TextView高度为行数相关截图(黄色高亮区域):
#####android:password
android:password 用于设置TextView中内容是否为明文。
#####setShadowLayer(float radius, float dx, float dy, int color)
setShadowLayer(float radius, float dx, float dy, int color)对应xml中的android:shadowRadius,android:shadowDx,android:shadowDy,android:shadowColor,用于设置文字阴影。
setShadowLayer截图(黄色高亮区域):
#####setEllipsize(TextUtils.TruncateAt where)
setEllipsize(TextUtils.TruncateAt where)对应xml中的android:ellipsize,用于文字省略样式设置。
#####setCompoundDrawablePadding(int pad)
setCompoundDrawablePadding(int pad)对应xml中的android:drawablePadding,用于设置TextView中文字与四周drawable的间距。
setCompoundDrawablePadding截图(黄色高亮区域):
#####setCompoundDrawableTintList(@Nullable ColorStateList tint)
setCompoundDrawableTintList(@Nullable ColorStateList tint)对应xml中的android:drawableTint,用于设置TextView四周drawable的着色。
**设置TextView的四周图片的颜色,只有在SDK>=23情况下有效! 低版本兼容方法: {@link Drawable#setColorFilter(int, PorterDuff.Mode)}方法,在java代码中手动为四周图片进行着色 **
示例:
经试验在Android 4.22上,以下方法无效:
DrawableCompat.setTint(d1,Color.RED);
DrawableCompat.setTintMode(d1, PorterDuff.Mode.SRC_ATOP);
正确做法:
Drawable d1 = getResources().getDrawable(R.mipmap.i1).mutate();
d1.setBounds(0,0,64,64);
d1.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
Drawable d2 = getResources().getDrawable(R.mipmap.i2).mutate();
d2.setBounds(0,0,64,64);
d2.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
Drawable[] drawables = tv_drawableTint.getCompoundDrawables();
drawables[0] = d1;
drawables[2] = d2;
tv_drawableTint.setCompoundDrawables(drawables[0],drawables[1],drawables[2],drawables[3]);
#####setLineSpacing(float add, float mult):
setLineSpacing(float add, float mult)对应xml中的android:lineSpacingMultiplier和android:lineSpacingExtra,用于设置多行TextView中单行高度。
setLineSpacing截图(黄色高亮区域):
#####setLetterSpacing(float letterSpacing)
setLetterSpacing(float letterSpacing)对应xml中的android:letterSpacing,用于设置文本的字符间距。
setLetterSpacing截图(黄色高亮区域):
#####setAllCaps(boolean allCaps)
setAllCaps(boolean allCaps)对应xml中的android:textAllCaps,用于设置TextView中的字符是否全部显示为大写形式。
#####setTransformationMethod(TransformationMethod method)
setTransformationMethod(TransformationMethod method)用于设置TextView展示内容与实际内容之间的转换规则。
#####setTextSize(int unit, float size)
setTextSize(int unit, float size)用于设置TextView实例的文字尺寸为指定单位unit的指定值size。
xml及Java代码:
public class Article1Activity extends AppCompatActivity {
private TextView tv_ellipsize = null;
int index = 0;
private TextUtils.TruncateAt[] ellipsizes = new TextUtils.TruncateAt[]{
TextUtils.TruncateAt.START,
TextUtils.TruncateAt.MIDDLE,
TextUtils.TruncateAt.END
};
Handler handlerEllipsize = new Handler(){
@Override
public void handleMessage(Message msg) {
index = ++index%ellipsizes.length;
tv_ellipsize.setEllipsize(ellipsizes[index]);
handlerEllipsize.sendMessageDelayed(handlerEllipsize.obtainMessage(),2000);
}
};
Handler handlerTransformationMethod = new Handler(){
@Override
public void handleMessage(Message msg) {
int what = 0;
if(msg.what == 0){
//大写
tv_SetTransformationMethod.setTransformationMethod(new MyTransformationMethod(true));
what = 1;
}else {
//小写
tv_SetTransformationMethod.setTransformationMethod(new MyTransformationMethod());
what = 0;
}
handlerTransformationMethod.sendEmptyMessageDelayed(what,2000);
}
};
private TextView tv_SetTransformationMethod = null;
private int[] units = new int[]{
TypedValue.COMPLEX_UNIT_PX,
TypedValue.COMPLEX_UNIT_DIP,
TypedValue.COMPLEX_UNIT_SP
};
Handler handlerSetTextSize = new Handler(){
@Override
public void handleMessage(Message msg) {
index = ++index%units.length;
tv_setTextSize.setTextSize(units[index],24.0f);
handlerSetTextSize.sendMessageDelayed(handlerSetTextSize.obtainMessage(),2000);
}
};
private TextView tv_setTextSize = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_article1);
tv_ellipsize = (TextView) findViewById(R.id.tv_ellipsize);
handlerEllipsize.sendMessage(handlerEllipsize.obtainMessage());
tv_SetTransformationMethod = (TextView) findViewById(R.id.tv_SetTransformationMethod);
handlerTransformationMethod.sendEmptyMessage(0);
tv_setTextSize = (TextView) findViewById(R.id.tv_setTextSize);
handlerSetTextSize.sendEmptyMessage(0);
}
class MyTransformationMethod implements TransformationMethod {
private boolean upperCase = false;
public MyTransformationMethod(boolean ... upperCase){
this.upperCase = (upperCase==null||upperCase.length<=0)?false:upperCase[0];
}
@Override
public CharSequence getTransformation(CharSequence source, View view) {
if(this.upperCase){
return TextUtils.isEmpty(source)?"":source.toString().toUpperCase(getResources().getConfiguration().locale)+"大写";
}else{
return TextUtils.isEmpty(source)?"":source.toString().toLowerCase(getResources().getConfiguration().locale)+"小写";
}
}
@Override
public void onFocusChanged(View view, CharSequence sourceText, boolean focused, int direction, Rect previouslyFocusedRect) {
}
}
}
以上就是个人实验和分析的一点结果,若有错误,请各位同学留言告知!
That's all !