title: Android: Measure Text Height on a Canvas
body: <p>I am currently working on rendering a Bitmap, that I then want to send to a mobile printer. However, I am struggling with measuring the height of my text, so I can advance the y position appropriately. </p>
  
  <p>My basic bitmap/canvas/paint configuration is this (Font Size is 16 and the dimensions of the bitmap are 200x400 (width x height):</p>
  
  <pre><code>public MyRenderer() {
      // Initialize bitmap
      bitmap = Bitmap.createBitmap(200, 400, Bitmap.Config.ARGB_8888);
  
      // Initialize canvas
      canvas = new Canvas(bitmap);
  
      // Initialize brush (Paint instance)
      brush = new Paint();
      brush.setTextSize(16);
      brush.setTypeface(Typeface.SANS_SERIF);
      brush.setColor(Color.BLACK);
      brush.setStyle(Paint.Style.FILL);
      brush.setAntiAlias(true);
      brush.setTextAlign(Align.LEFT);
  }
  </code></pre>
  
  <p>So far so good, now what I want to do is: If I use the Paint's method drawText I need to supply the x and y coordinates. As for x that's zero (assuming left aligned text) but as for y, I'd have to calculate the height of each text I print and add it up, so I can keep track of my current y position.</p>
  
  <p>And this is where it gets odd: I am using the following method to determine the height of a text (using the Paint objected that I initialized previously - it's called "brush"):</p>
  
  <pre><code>public int measureHeight(String text) {
      Rect result = new Rect();
      // Measure the text rectangle to get the height
      brush.getTextBounds(text, 0, text.length(), result);
      return result.height();
  }
  </code></pre>
  
  <p>The above method returns the following values for the following texts:</p>
  
  <ol>
  <li>"<em>Hello World</em>" returns a height of <strong>12</strong></li>
  <li>"<em>A camera instance can be used to compute 3D transformations and generate a matrix.</em>" returns a height of <strong>16</strong></li>
  <li>"<em>Introducing Android Design: The place to learn about principles, building blocks, and patterns for creating world-class Android user interfaces. Whether you're a UI professional or a developer playing that role, these docs show you how to make good design decisions, big and small.</em>" returns a height of <strong>16</strong></li>
  </ol>
  
  <p>It makes sense to me, that number 2 and 3 return a greater height than number 1 but if one line has a height of 12 (as number one does) - it makes no sense, that multiple lines have a height of 16 ? </p>
  
  <p>Am I missing something here? There is a convenience method for measuring the width of a text (using an instance of paint and call measureText("myText") which works perfectly, however I am quite at a loss, when it comes to the height, as the above given results don't make any sense to me.</p>
  
  <p><strong>EDIT</strong></p>
  
  <p>I am aware, that getTextBounds probably does no auto-wrapping of multi-lined text, and that's ok, I already wrote a method for splitting text, but even if it just measures one line, the above given length values still seem unlikely.</p>