美文网首页
Android TextView 超长文本自动添加省略号

Android TextView 超长文本自动添加省略号

作者: 王家宇 | 来源:发表于2016-01-26 11:05 被阅读1604次

用法:

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);
    }
}

相关文章

网友评论

      本文标题:Android TextView 超长文本自动添加省略号

      本文链接:https://www.haomeiwen.com/subject/ccddkttx.html