项目需求,如果在项目中第一行文字需要添加布局的情况我们应该怎么做呢!经过一番考虑和查找我最终选择了缩进的方式解决这个问题。
不多说了直接上代码:
/**
* @param context
* @param textView
* @param mPx
*/
public void SJ(Context context, TextView textView, String str, int mPx) {
//1.先创建SpannableString对象
SpannableString spannableString = new SpannableString(str);
//2.设置文本缩进的样式,参数arg0,首行缩进的像素,arg1,剩余行缩进的像素,这里我将像素px转换成了手机独立像素dp
LeadingMarginSpan.Standard what = new LeadingMarginSpan.Standard(dp2px(context, mPx), 0);
//3.进行样式的设置了,其中参数what是具体样式的实现对象,start则是该样式开始的位置,end对应的是样式结束的位置,参数flags,定义在Spannable中的常量
spannableString.setSpan(what, 0, spannableString.length(), SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(spannableString);
}
flag有以下四种:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点
Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含两端start,但不包含end所在的端点
Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点
我这里将px转成dp
/**
* dp转px
*
* @param context
* @param dpVal
* @return
*/
public static int dp2px(Context context, float dpVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
dpVal, context.getResources().getDisplayMetrics());
}
ok处理完成!