Paint paint= new Paint(); 
paint.setTextSize(size);
Rect rect = new Rect();
//返回包围整个字符串的最小的一个Rect区域
paint.getTextBounds(str, 0, str.length()-1, rect);
int strwidth = rect.width(); Paint paint= new Paint(); 
paint.setTextSize(size);

 
    int iRet = 0;  
    if (str != null && str.length() > 0) {  
            int len = str.length();  
            float[] widths = new float[len];  
            paint.getTextWidths(str, widths);  
            for (int j = 0; j < len; j++) {  
                iRet += (int) Math.ceil(widths[j]);  
            }  
    }  
    return iRet;
网上找到的这两种方法,试过了都不行,得到的宽度都跟显示在TextView上的相差很大,求解决方法。

解决方案 »

  1.   

    fontWidth = (int) paint.measureText(str);
      

  2.   


    这个你试过吗?paint需要设置哪些值吗?
      

  3.   

    mPaintText.measureText(content); 
    没错的,这个就可以获得字符串长度
      

  4.   


    我发现,我把字体设置为12,显示10个汉字,mPaintText.measureText(content)得出的结果是120,但显示出来的宽度却是160左右。我试着在记事本里打10个汉字,把字号设置为12,用截图工具测量,发现宽度也是160多,难道我显示器有问题?
      

  5.   

    在paint类里面:public float measureText (String text)
    用这行代码:int width = paint.measureText("this text");
    然后measureText(String text)会返回text的宽度
      

  6.   

    字体设置为12px 还是12sp? 如果是后者涉及屏幕密度转换
      

  7.   

    我试过了,但返回的结果好像是不包含字间距的,显示在textview上的比measureText返回的还宽
      

  8.   


     textView.setTextSize(12);我这样设置的,不知道是px还是sp
      

  9.   


    public void setTextSize (float size)Added in API level 1
    Set the default text size to the given value, interpreted as "scaled pixel" units. This size is adjusted based on the current density and user font size preference.Related XML Attributes
    android:textSize
    Parameters
    size The scaled pixel size.
    SP
      

  10.   

    请戳
    http://blog.csdn.net/skistua/article/details/6331847
    http://blog.csdn.net/nokiaguy/article/details/5509638
      

  11.   

    试一下以下代码,希望给你帮助:
    Paint paint= new Paint(); 
    paint.setTextSize(size);
    int txtWidth = (int)(paint.measureText("Hello how are you?"));
      

  12.   


    试了,还是不行,TextPaint tPaint = new TextPaint();
    tPaint.setTextSize(12);
    int ff = (int)tPaint.measureText("我是谁");这样返回的是36,但,显示出来整串的宽度大于36,不知道是没把间距算进去还是怎么样
      

  13.   

    那么试试这个Paint p=new paint();int value = p.measureText("give input string to measure");