Сделайте так, чтобы текст соответствовал размеру экрана - PullRequest
3 голосов
/ 17 мая 2011

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

    NumberOfPages=text.length()/CharPerPage;    //CharPerPage=500;  
    NumberOfPages++;        

    Chapters.add(text.indexOf(" ", CurrentPage*CharPerPage));
    CurrentPage++;
    int tmp=0;
    for(int i =NumberOfPages;i>0;i--)
    {           
         tmp =(CurrentPage*CharPerPage);
        if(tmp>text.length())
        {
            Chapters.add(text.length());    
            break;
        }
        else
        {
        Chapters.add(text.indexOf(" ", tmp));   
        CurrentPage++;
        }
    }

Таким образом, я делю текст на страницы, и каждая страница имеет 500 символов ... Но это нехорошо, поскольку Android имеет разные размеры и формы экрана, а разрывы строк не учитываются, поэтому он может выходить за пределы экрана ... Так кто-нибудь может предложить способ узнать, сколько символов необходимо заполнить экран, чтобы я мог сделать оставшуюся часть текста на другой странице? Спасибо.

1 Ответ

1 голос
/ 17 мая 2011

Хорошо, вот снимок - и довольно неуклюжий, но вкратце:

* Вам нужно знать, будет ли какая-либо строка текста соответствовать ширине вашего взгляда * Вам нужно знать, каксколько строк у вас есть * Вам нужно обработать встроенные символы новой строки

, поэтому

поместится ли какой-либо текст в любую строку

  private boolean isTooLarge (TextView text, String newText) {    
     float textWidth = text.getPaint().measureText(newText);
     return (textWidth >= text.getMeasuredWidth ());
  } 

сколько строк имеет ваше текстовое представление:

numLinesPerPage=mTextView.getHeight()/mTextView.getLineHeight();  //not this doesn't handle special cases where you've changed the font, bolded it etc

С помощью этих двух инструментов вы можете перебирать текст, добавляя слова, отслеживая количество оставшихся строк для работы (и обрабатывать символы новой строки, если они есть в вашем тексте)

note: getHeight не может быть вызван в конструкторе, поскольку он еще не знает высоту - вы также можете сделать это в onDraw или, возможно, в onMeasure, если у вас есть пользовательский элемент управления.

...