在某些版本,或某些机型的系统中,TextView 设置ellipsize = "End" 或其它属性会没有效果,文本过长了,后面也不会显示“...”,这时候,我们可以自己写一个方法对这段过长的字符串进行处理,帖上方法:
public static String ellipsizeString(final String txt, final TextView txtView) {
if(android.os.Build.VERSION.SDK_INT < 14) // 据初步证实API VISION 14以上的会出现这种情况,这个判断也可以去掉
return txt;
final String ellip = ServiceBindActivity.curContext.getResources().getString(R.string.txt_ellipsize);
String str = txt;
TextPaint txtpaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
txtpaint.setTextSize(txtView.getTextSize());
float txtWidth = txtpaint.measureText(str);
// float scale = ServiceBindActivity.curContext.getResources().getDisplayMetrics().scaledDensity;
float PLpix = txtView.getPaddingLeft();// * scale + 0.5f;
float PRpix = txtView.getPaddingRight();// * scale + 0.5f;
float MLpix = 0f;
float MRpix = 0f;
float txtViewWidth = txtView.getResources()
.getDisplayMetrics().widthPixels - (MLpix + MRpix) - (PLpix + PRpix);
if(txtWidth <= txtViewWidth)
return str;
float onetextwidth = txtWidth / str.length();
BigDecimal bd = new BigDecimal((txtViewWidth - txtpaint.measureText(ellip)) / onetextwidth).setScale(0, BigDecimal.ROUND_HALF_UP);
return str.substring(0, bd.intValue()) + ellip;
}
在Elipsize 属性设置为MIDDLE, START 的时候也会出现相同的情况,但也可以参照上面的思路解决。