The font Arial has "proportional" character widths, that means that an "i" uses less space that a "m"
You could select a fond that is "nonpropotional" so that an "i" occupies the same space as a "m".
The most famous font of this type is Courier
or you follow this advice:
I want to draw a line under a text. But the length that I calculate seems not equals to the length of the text.
No! That is NOT true.
The 'length' that you calculate is EXACTLY equal to the length of the text.
int lineWidth = (int)layout.getBounds().getWidth();
That line widths is CORRECT.
But the line you DRAW is not the correct length because you are NOT specifying the parameters to 'drawLine' correctly:
g2d.drawLine(35, 150, lineWidth, 150);
You are using 'lineWidth' as the x coordinate of the second point. See the Java API for the method
public abstract void drawLine(int x1, int y1, int x2, int y2)
Draws a line, using the current color, between the points
(x2, y2)in this graphics context's coordinate system.
x1- the first point's x coordinate.
y1- the first point's y coordinate.
x2- the second point's x coordinate.
y2- the second point's y coordinate.
See 'x2' the third parameter? That is "the second points's x coordinate. So it needs to be 'x1' plus the line width; you have to start at x1 and then go the line width to the right.