While I waited for a possible solution to this question, I have been experimenting and trying to figure it out.
The closest solution to this problem was based in a method from paint.
Basically paint has a method called 'breaktext' which:
public int breakText (CharSequence text, int start, int end, boolean
measureForwards, float maxWidth, float[] measuredWidth)
Added in API level 1
Measure the text, stopping early if the measured width exceeds
maxWidth. Return the number of chars that were measured, and if
measuredWidth is not null, return in it the actual width measured.
I combine that with paint 'getTextBounds' which:
public void getTextBounds (String text, int start, int end, Rect bounds)
Added in API level 1
Return in bounds (allocated by the caller) the smallest rectangle that encloses all of the >characters, with an implied origin at (0,0).
So now I can obtain the number of chars that fit in a given width and the height of those chars.
Using a while you can keep moving the removing chars from the string you want to measure and obtain the number of lines (by using a while(index < string.length)) and multiply that by the height obtained in the getTextBounds.
Additionally you will have to add a variable height for each two lines that represent the space between the lines (which is not counted in the getTextBounds).
As an example code, the function to know the height of a multiple line text is something like this:
public int getHeightOfMultiLineText(String text,int textSize, int maxWidth) {
paint = new TextPaint();
paint.setTextSize(textSize);
int index = 0;
int linecount = 0;
while(index < text.length()) {
index += paint.breakText(text,index,text.length,true,maxWidth,null);
linecount++;
?}
Rect bounds = new Rect();
paint.getTextBounds("Yy", 0, 2, bounds);
// obtain space between lines
double lineSpacing = Math.max(0,((lineCount - 1) * bounds.height()*0.25));
return (int)Math.floor(lineSpacing + lineCount * bounds.height());
Note: maxWidth variable is in pixels
Then you will have to call this method inside a while to determine what is the max font size for that height. An example code would be:
textSize = 100;
int maxHeight = 50;
while(getHeightOfMultiLineText(text,textSize,maxWidth) > maxHeight)
textSize--;
Unfortunately this was the only (as far as I know) way I was able to achieve the aspect from the images above.
Hope this can be of help to anyone trying to overcome this obstacle.