3

私は長いテキストを持っているので、ページに分割することにしました。各スワイプで次のページにスクロールするようにしました..私が行った方法は次のとおりです。

    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にはさまざまな画面サイズと形状があり、改行はカウントされないため、画面を超える可能性があるため、これは良くありません...残りのテキストを別のページに表示できるように、画面を埋めるのに必要な文字数を知る方法はありますか? ありがとう。

4

1 に答える 1

1

ここにショットがあります-かなり不器用ですが、要するに:

*任意のテキスト行がビューの幅方向に収まるかどうかを知る必要があります *何行あるかを知る必要があります *埋め込まれた改行を処理する必要があります

それで

一部のテキストは任意の行に収まりますか

  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

これらの 2 つのツールを使用すると、テキストを反復処理して単語を追加し、残りの行数を追跡できます (テキストに改行が含まれている場合は改行を処理します)。

注: getHeight は高さをまだ認識していないため、コンストラクターで呼び出すことはできません。カスタム コントロールがある場合は、onDraw または onMeasure でこれを行うこともできます。

于 2011-05-17T19:02:35.913 に答える