2010-05-20 16 views

Antwort

6

So, während ich dies noch nicht getestet haben (leider kein sdk Setup vor mir)

Ihre Textview sollte eine Farbe Objekt für sie geschaffen haben. Nun würde ich annehmen, dass TextPaint mit dem richtigen Padding und Offset für das Hintergrundbild der Textansicht erstellt wurde. So sollten Sie in der Lage sein, etwas zu tun, wie

TextView a = getViewById(R.id.textview); 
TextPaint paint = a.getPaint(); 
Rect rect = new Rect(); 
String text = String.valueOf(a.getText()); 
paint.getTextBounds(text, 0, text.length(), rect); 
if(rect.height() > a.getHeight() || rect.getWidth() > a.getWidth()) { 
Log.i("TEST", "Your text is too large"); 
} 
+0

Gerade ändern 'rect.getWidth()' auf 'rect.width()'. –

4

Ich weiß, dass dies eine alte Frage, aber ich kam über sie in meiner Suche nach einer ähnlichen Antwort und wollte die Lösung anbieten zu können, die ich gefunden, falls jemand anders wundert sich.

Das ist für mich gearbeitet:

TextView myTextView = rootView.getViewById(R.id.my_text_view); 
if (myTextView.getLineCount() > myTextView.getMaxLines()) { 
    // your code here 
} 
1

Try this:

mTextView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     ViewTreeObserver obs = mTextView.getViewTreeObserver(); 
     obs.removeOnGlobalLayoutListener(this); 
     int height = mTextView.getHeight(); 
     int scrollY = mTextView.getScrollY(); 
     Layout layout = mTextView.getLayout(); 
     int firstVisibleLineNumber = layout.getLineForVertical(scrollY); 
     int lastVisibleLineNumber = layout.getLineForVertical(height + scrollY); 

     //check is latest line fully visible 
     if (mTextView.getHeight() < layout.getLineBottom(lastVisibleLineNumber)) { 
      // TODO you text is cut 
     } 
    } 
}); 
+0

Sie haben Recht! Ihre Lösung ist Arbeit! –

Verwandte Themen