2010-12-01 14 views
6

まあ、私はすべての私の質問にタイトルに合うように管理してきました。私は長いテキストを列/フレームに分割し、それらを表示するためにレイアウトする必要があります。私は数日の間、ソリューションを探してきましたが、どのようなタスクも完了するためのサンプルや明確なドキュメントは見つかりません。私はStaticLayoutのいくつかの言及を見たことがありますが、私はそれを正しく使う方法を知らない。テキストの高さに関しては、TextPaintのgetTextBoundsメソッドを試しましたが、幅の制限はなく、単一行しか測定していないようです(おそらく、何か間違っていたかもしれません)。固定幅のテキストの高さを取得する方法とフレームに収まるテキストの長さを取得する方法は?

誰かがStaticLayoutの例を持っているのでしょうか、それともそのサブクラスの使用ですか?

「紙の上に」すべてがとても簡単に見える:「フレーム」を作成し、それに収まる文字数を確認し、フレームを記入して配置し、テキストの終わりまで繰り返すが、これを行う方法については何も見つけることができない:)

+0

uがコードをテストしましたか? –

答えて

6

私はあなたの質問に対する正確な答えはわかりませんが、一般的には、グラフィカルライブラリで利用可能な方法を使用して、フォントの種類とサイズに基づいてテキストの幅と高さを計算できます。

私はC#とJavaでそれを行っています。 C#では "MeasureString"、Javaでは "FontMetrics"と呼ばれています。

EDIT:このコードは(私はここアンドロイドSDKを持っていないので、私はそれをコンパイルしていない)に有用である場合

を参照してください:

String myText="";  
    String tempStr=""; 

    int startIndex=0; 
    int endIndex=0; 

    //calculate end index that fits 
    endIndex=myPaint.breakText(myTest, true, frameWidth, null)-1; 

    //substring that fits into the frame 
    tempStr=myText.substring(startIndex,endIndex); 

    while(endIndex < myText.length()-1) 
    {   

     //draw or add tempStr to the Frame 
     //at this point 

     //set new start index 
     startIndex=endIndex+1; 

     //substring the remaining of text 
     tempStr=myText.substring(startIndex,myText.length()-1); 

     //calculate end of index that fits 
     endIndex=myPaint.breakText(tempStr, true, frameWidth, null)-1; 

     //substring that fits into the frame 
     tempStr=myText.substring(startIndex,endIndex); 
    } 

同様の方法は、Androidのために用意されています

breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 

測定された幅がmaxWidthを超えると、テキストを測定して早期に停止します。

measureText(String text) 

戻るテキストの幅。

http://developer.android.com/reference/android/graphics/Paint.html

+0

がアンドロイドで動作していない、@ sniurkst、あなたが完璧な答えを持っているなら、それを投稿してください。 – Jayesh

関連する問題