用法:
public void setTextMy(String text,float textsize,int width)只需要设置text,字体大小和TextView显示的宽度
源码:
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyTextView extends TextView {
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyTextView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
/**setText
* @param text 显示的字符串
* @param textsize 字体大小
* @param width TextView的宽度
*/
public void setTextMy(String text,float textsize,int width){
setSingleLine();//默认单行
//sp2px(getContext(), textsize) 单个中文的宽度,sp转换成px适应不同手机
int textWidth = sp2px(getContext(), textsize)*(getChineseNums(text)+(getNoChineseNums(text)+1)/2);
if (textWidth>width) {
int n = width/BaseUtils.sp2px(getContext(), textsize);
if(n-1<text.length()){
setText(text.substring(0, n-1)+"...");
}else{
setText(text);
}
}else{
setText(text);
}
}
/**字符串中,中文的字数
* @param str
* @return
*/
private int getChineseNums(String str) {
int byteLength = str.getBytes().length;
int strLength = str.length();
return (byteLength - strLength) / 2;
}
/**字符串中,非中文的字数
* @param str
* @return
*/
private int getNoChineseNums(String str) {
int byteLength = str.getBytes().length;
int strLength = str.length();
return strLength - (byteLength - strLength) / 2;
}
/**
* 将sp值转换为px值,保证文字大小不变
*
* @param spValue
* @param fontScale
* (DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int sp2px(Context context, float spValue) {
final float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
}