22

複数行の TextView を含む Android アプリケーションのレイアウトがあります。画面が縦向きの場合、TextView は、横向きモードで実行している場合とは異なる長さのテキストを表示できます。また、小さな画面で実行している場合、TextView は、大きな画面で実行している場合とは異なる長さのテキストを表示できます。

テキストが収まるかどうか、または切り捨てられるかどうかを確認する方法はありますか? または、TextView がいっぱいかどうかを確認する方法はありますか?

問題は、横向き、縦向き、小さな画面、大きな画面などに応じて、TextView に異なる行数が含まれる可能性があることです。

アドバイスありがとうございます。

よろしくお願いします、

ジェームズ

4

6 に答える 6

10

MULTILINE TextView でテキストの高さを測定する問題に対する「生意気な」解決策を見つけました: -

//Calculate the height of the text in the MULTILINE TextView
int textHeight = textView.getLineCount() * textView.getLineHeight();
if (textHeight > textViewHeight) {
    //Text is truncated because text height is taller than TextView height
} else {
    //Text not truncated because text height not taller than TextView height
}

ただし、このソリューションにはいくつかの注意事項があります: -

まず getLineHeight() に関して、テキスト内のマークアップにより、個々の行がこの高さよりも高くなったり短くなったりする可能性があり、レイアウトには追加の最初または最後の行のパディングが含まれる場合があります。http://developer.android.com/reference/android/widget/TextView.html#getLineHeight()を参照してください

次に、アプリケーションは TextView の実際の高さをピクセル単位で計算する必要があり、(私のレイアウトの場合) textView.getHeight() ほど単純ではない可能性があり、計算はレイアウトごとに異なる場合があります。

TextView の実際のピクセルの高さはテキストの内容によって異なる可能性があるため、 LinearLayoutを避けることをお勧めします。RelativeLayout を使用しています ( http://pastebin.com/KPzw5LYdを参照)。

このRelativeLayoutを使用すると TextView の高さを次のように計算できます。

//Calculate the height of the TextView for layout "http://pastebin.com/KPzw5LYd"
int textViewHeight = layout1.getHeight() - button1.getHeight() - button2.getHeight();

それが役立つことを願って、

よろしく、

ジェームズ

于 2013-08-07T19:06:53.980 に答える
4

基本的に、方向モードが変更されたときの textview のサイズとテキストのサイズを計算する必要があります。そうしてみViewTreeObserver.OnGlobalLayoutListenerてください。

方向変更メソッドの内部:

main_view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            main_view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
            //Calculation goes here
            int text_size = getTextSize(text_view.getText().toString());
            int text_view_size = text_view.getLayoutParams().width;
            //Compare your text_size and text_view_size and do whatever you want here.
        }
    });

text_size を計算するコードは次のとおりです。

private int getTextSize(String your_text){
    Paint p = new Paint();
    //Calculate the text size in pixel
    return p.measureText(your_text);
}

この助けを願っています。

于 2013-08-07T03:22:56.013 に答える
0

複数行の (またはそうでない) TextView が切り捨てられるかどうかを確認するには、この投稿を確認してください。

または、スクロールするテキストビューの使用を検討しましたか? (マーキー)..指定された幅に対して長すぎる場合、テキストが(水平に、アニメーション化されて)スクロールする場所は?

以下は、レイアウト ファイル内の TextView の例で、これらの特性のいくつかがあります。

<TextView
    android:id="@+id/sometextview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:singleLine="true"
    android:scrollHorizontally="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:freezesText="true"
    android:textColor="#808080"
    android:textSize="14sp"
    android:text="This is a long scrolling line of text.. (etc)"/>
于 2013-08-06T18:37:49.053 に答える