3

これは、文字に関してTextViewの幅を設定するのとは逆だと思います

いくつかのレポートデータを表示しているTextViewがあります。列を並べたいので、その一部にモノスペースTypefaceSpanを使用します。

テスト用のAndroidデバイスを使用して、収まる列の数を計算しましたが、Androidエミュレーターの列は1つ少ないようで、ポートレートモードでは見苦しい方法で折り返されます。

1行に何文字収まるかを知る方法はありますか?

4

3 に答える 3

13

答えは、textViewのペイントオブジェクトのbreakText()を使用することです。これがサンプルです、

int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
 true, textView.getWidth(), null);

totalCharstoFitこれで、1行に収まる正確な文字が含まれます。これで、完全な文字列のサブ文字列を作成して、次のようにTextViewに追加できます。

String subString=fullString.substring(0,totalCharstoFit);
textView.append(substring);

そして、残りの文字列を計算するには、これを行うことができます、

fullString=fullString.substring(subString.length(),fullString.length());

今、完全なコード、

これをwhileループで実行します。

while(fullstirng.length>0)
{
int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
     true, textView.getWidth(), null);
 String subString=fullString.substring(0,totalCharstoFit);
    textView.append(substring);
 fullString=fullString.substring(subString.length(),fullString.length());

}
于 2012-07-16T04:33:06.047 に答える
1

さて、これを見つけるために数学を行うことができ、文字の幅を見つけ、これで画面の幅を割ると、あなたはあなたが探しているものを手に入れるでしょう。

しかし、それをより良く設計することは不可能ですか?グループ化できる列はありますか?グラフィックとして表示しますか、それとも完全に除外しますか?

別の可能な解決策は、ビューページャーのようなものを使用することです。(最初のページに収まる列の幅を調べてから、残りのテーブルを2番目のページに分割します)。

于 2012-07-16T01:58:36.150 に答える
1

以下のコードでTextviewの全行と各文字の文字列を取得できます。その後、各行にスタイルを設定できます。

最初の行を太字にしました。

private void setLayoutListner( final TextView textView ) {
    textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            final Layout layout = textView.getLayout();

            // Loop over all the lines and do whatever you need with
            // the width of the line
            for (int i = 0; i < layout.getLineCount(); i++) {
                int end = layout.getLineEnd(0);
                SpannableString content = new SpannableString( textView.getText().toString() );
                content.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, end, 0);
                content.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), end, content.length(), 0);
                textView.setText( content );
            }
        }
    });
}

この方法を試してください。この方法で複数のスタイルを適用できます。

テキストビューの幅は、次の方法で取得することもできます。

for (int i = 0; i < layout.getLineCount(); i++) {
        maxLineWidth = Math.max(maxLineWidth, layout.getLineWidth(i));
}
于 2015-02-13T10:01:27.463 に答える