2017-10-06 11 views
0

私のアプリでは、最後に3つのドットを付けないで1行を表示するためにmyTextViewにテキストが必要です。長すぎると少し違った書式のテキストを表示する必要があるので、maxHeightを設定するようなものはそれを作ってから助けにならないでしょう。TextViewが表示される前にTextViewがいくつあるか確認してください

私のアプローチは、TextViewが持つ線の数をチェックし、1より大きい場合はテキストを短くします。これは私が望むアプローチですが、まずLineCountを確認するためにViewを描画する必要があるため、 2行のレイアウトが点滅簡単に1行にテキストを切断前:

myTextView.Post(() => 
    { 
     if (myTextView.LineCount > 1) 
     { 
      // make text shorter here to fit 1 line 
     } 
    }); 

だから、私の質問は、それがユーザーに表示される前に、ビュー必要がありますどのように多くの行をチェックする方法はありますか?私はそれを文字列の文字数に基づいて強制することができますが、それは間違っています。

+0

リスナーを 'textview'の' addTextChangedListener'に追加し、 'afterTextChanged'に' \ n'文字を数えることができますか? –

+0

これは、表示される直前に表示を確認するために使用することができます。https://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html –

+0

GlobalLayoutイベントは私に "long "テキストはもはや、レイアウトは2列に並んでいます。 TextChangedイベントは\ n文字を持たず、LineCountはもちろん0です。 –

答えて

0

私は私のために働く解決策になった。画面幅を取得し、TextViewの幅を計算し、テキストの長さをチェックし、dpのすべてを取得する必要があります。したがって:

// get the screen width 
var metrics = Resources.DisplayMetrics; 
var widthInDp = (int)((metrics.WidthPixels)/metrics.Density); 

// this line is very specific, it calculates the real usable space 
// in my case, there was padding of 5dp nine times, so subtract it 
var space = widthInDp - 9 * 5; 

// and in this usable space, I had 7 identical TextViews, so a limit for one is: 
var limit = space/days.Length; 

// now calculating the text length in dp    
Paint paint = new Paint(); 
paint.TextSize = myTextView.TextSize; 
var textLength = (int)Math.Ceiling(paint.MeasureText(myTextView.Text, 0, myTextView.Text.Length)/metrics.Density); 

// and finally formating based of if the text fits (again, specific) 
if (textLength > limit) 
{ 
    myTextView.Text = myTextView.Text.Substring(0, myTextView.Text.IndexOf("-")); 
} 

私はそれを見ていますが、私はここでそれを残して、誰かが役に立つと思うかもしれません。

1

まず、TextView VisibilityをInvisibleに設定して、スペースを占有してから入力します。

行数を取得する方法があります。

TextView txt = (TextView)findViewById(R.id.txt); 
txt.getLineCount(); 

"int"を返します。 TextChangedListenerでそのintを使用して、TextViewの可視性を再生します。

このようにして、TextViewには改行がいくつあるか知ることができます。

乾杯。

+0

私にとってはうまくいかないでしょう。他のビューがそれに腹を立てているので、TextViewは目に見えなくても私のレイアウトを混乱させるでしょう。しかし、意見に感謝します。 –

関連する問題