2013-04-17 2 views
2

У меня есть следующий код, чтобы найти размеры экрана, чтобы рассчитать, сколько текста подходит на экране.Поиск высоты межстрочного интервала

Теперь мне нужно знать, сколько строк подходит на экране. У меня размер текста от восхождения до спуска. Мне нужно знать высоту межстрочного интервала. getFontSpacing также дает значение от восхождения до спуска.

Кто-нибудь знает, есть ли способ найти значение межстрочного интервала?

//Code for Getting screen Dimensions 
    Display display = getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 
    int height = size.y; 

    //Breaking Text When Width Is Filled 
    Paint p = new Paint(); 
    p.setTextSize(60); 
    int textNum = p.breakText(sText, 0, 20, forOrBack, width, null); 

    //Working Out How Many Lines Can Be Entered In The Screen 
    float fHeight = p.descent() - p.ascent(); 
    int tHeight = (int) fHeight; 
    int numLines = height/tHeight; 

ответ

2
Paint.FontMetrics fm = paint.getFontMetrics(); 
float fullHeight = fm.top - fm.bottom; 

Насколько я помню, fm.bottom < 0, поэтому вычитание вас на самом деле получить

Math.abs(fm.top) + Math.abs(fm.bottom) 

Этого значения больше, чем подъем-спуск, и, я думаю, это это фактический размер строки.

Вы можете использовать TextView.getLineHeight() после установки TextSize и предпочтительно после завершения компоновки (например, в OnWindowFocusChanged).

+0

Правда, таким образом я получил большее число, хотя до сих пор это не фактическое значение высоты текста + расстояния. – SitRock

+0

О опции setLineSpacing(), знаете ли вы, зависит ли размер межстрочного интервала от размера текста, то есть он изменится, если изменится размер текста, и если да, то есть отношение к изменению высоты межстрочного интервала. – SitRock

+0

Извините, я не заметил изменений, которые я проверю. – SitRock

2

Следующие возвращают рекомендуемого межстрочный интервал

textView.getPaint().getFontSpacing() 

вы можете получить высоту вас текстом несколько способов. Я предпочитаю метод getTextBounds краски и просто добавляю два значения вместе.

Смежные вопросы