title: Android Paint: .measureText() vs .getTextBounds()
body: <p>I'm measuring text using <code>Paint.getTextBounds()</code>, since I'm interested in getting both the height and width of the text to be rendered. However, the actual text rendered is always a bit wider than the <code>.width()</code> of the <code>Rect</code> information filled by <code>getTextBounds()</code>.</p>
  
  <p>To my surprise, I tested <code>.measureText()</code>, and found that it returns a different (higher) value. I gave it a try, and found it correct.</p>
  
  <p>Why do they report different widths? How can I correctly obtain the height and width? I mean, I <em>can</em> use <code>.measureText()</code>, but then I wouldn't know if I should trust the <code>.height()</code> returned by <code>getTextBounds()</code>.</p>
  
  <p>As requested, here is minimal code to reproduce the problem:</p>
  
  <pre><code>final String someText = "Hello. I believe I'm some text!";
  
  Paint p = new Paint();
  Rect bounds = new Rect();
  
  for (float f = 10; f &lt; 40; f += 1f) {
      p.setTextSize(f);
  
      p.getTextBounds(someText, 0, someText.length(), bounds);
  
      Log.d("Test", String.format(
          "Size %f, measureText %f, getTextBounds %d",
          f,
          p.measureText(someText),
          bounds.width())
      );
  }
  </code></pre>
  
  <p>The output shows that the difference not only gets greater than 1 (and is no last-minute rounding error), but also seems to increase with size (I was about to draw more conclusions, but it may be entirely font-dependent):</p>
  
  <pre><code>D/Test    (  607): Size 10.000000, measureText 135.000000, getTextBounds 134
  D/Test    (  607): Size 11.000000, measureText 149.000000, getTextBounds 148
  D/Test    (  607): Size 12.000000, measureText 156.000000, getTextBounds 155
  D/Test    (  607): Size 13.000000, measureText 171.000000, getTextBounds 169
  D/Test    (  607): Size 14.000000, measureText 195.000000, getTextBounds 193
  D/Test    (  607): Size 15.000000, measureText 201.000000, getTextBounds 199
  D/Test    (  607): Size 16.000000, measureText 211.000000, getTextBounds 210
  D/Test    (  607): Size 17.000000, measureText 225.000000, getTextBounds 223
  D/Test    (  607): Size 18.000000, measureText 245.000000, getTextBounds 243
  D/Test    (  607): Size 19.000000, measureText 251.000000, getTextBounds 249
  D/Test    (  607): Size 20.000000, measureText 269.000000, getTextBounds 267
  D/Test    (  607): Size 21.000000, measureText 275.000000, getTextBounds 272
  D/Test    (  607): Size 22.000000, measureText 297.000000, getTextBounds 294
  D/Test    (  607): Size 23.000000, measureText 305.000000, getTextBounds 302
  D/Test    (  607): Size 24.000000, measureText 319.000000, getTextBounds 316
  D/Test    (  607): Size 25.000000, measureText 330.000000, getTextBounds 326
  D/Test    (  607): Size 26.000000, measureText 349.000000, getTextBounds 346
  D/Test    (  607): Size 27.000000, measureText 357.000000, getTextBounds 354
  D/Test    (  607): Size 28.000000, measureText 369.000000, getTextBounds 365
  D/Test    (  607): Size 29.000000, measureText 396.000000, getTextBounds 392
  D/Test    (  607): Size 30.000000, measureText 401.000000, getTextBounds 397
  D/Test    (  607): Size 31.000000, measureText 418.000000, getTextBounds 414
  D/Test    (  607): Size 32.000000, measureText 423.000000, getTextBounds 418
  D/Test    (  607): Size 33.000000, measureText 446.000000, getTextBounds 441
  D/Test    (  607): Size 34.000000, measureText 455.000000, getTextBounds 450
  D/Test    (  607): Size 35.000000, measureText 468.000000, getTextBounds 463
  D/Test    (  607): Size 36.000000, measureText 474.000000, getTextBounds 469
  D/Test    (  607): Size 37.000000, measureText 500.000000, getTextBounds 495
  D/Test    (  607): Size 38.000000, measureText 506.000000, getTextBounds 501
  D/Test    (  607): Size 39.000000, measureText 521.000000, getTextBounds 515
  </code></pre>