Ich versuche, eine Methode zum Ändern der Größe von mehrzeiligen Text in einem TextView
so, dass es innerhalb der Grenzen (sowohl die X-und Y-Abmessungen) der TextView
.Wie skaliere/skaliere ich Text, um ihn an TextView anzupassen?
Derzeit habe ich etwas, aber alles was es tut, ist die Größe des Textes so, dass nur der erste Buchstabe/Zeichen des Textes die Abmessungen der TextView
(d. H. Nur der erste Buchstabe ist sichtbar, und es ist riesig). Ich brauche es, um alle Zeilen des Textes innerhalb der Grenzen des TextView anzupassen.
Hier ist, was ich bisher:
public static void autoScaleTextViewTextToHeight(TextView tv)
{
final float initSize = tv.getTextSize();
//get the width of the view's back image (unscaled)....
float minViewHeight;
if(tv.getBackground()!=null)
{
minViewHeight = tv.getBackground().getIntrinsicHeight();
}
else
{
minViewHeight = 10f;//some min.
}
final float maxViewHeight = tv.getHeight() - (tv.getPaddingBottom()+tv.getPaddingTop())-12;// -12 just to be sure
final String s = tv.getText().toString();
//System.out.println(""+tv.getPaddingTop()+"/"+tv.getPaddingBottom());
if(minViewHeight >0 && maxViewHeight >2)
{
Rect currentBounds = new Rect();
tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);
//System.out.println(""+initSize);
//System.out.println(""+maxViewHeight);
//System.out.println(""+(currentBounds.height()));
float resultingSize = 1;
while(currentBounds.height() < maxViewHeight)
{
resultingSize ++;
tv.setTextSize(resultingSize);
tv.getPaint().getTextBounds(s, 0, s.length(), currentBounds);
//System.out.println(""+(currentBounds.height()+tv.getPaddingBottom()+tv.getPaddingTop()));
//System.out.println("Resulting: "+resultingSize);
}
if(currentBounds.height()>=maxViewHeight)
{
//just to be sure, reduce the value
tv.setTextSize(resultingSize-1);
}
}
}
Ich denke, das Problem bei der Verwendung von tv.getPaint().getTextBounds(...)
ist. Es gibt immer kleine Zahlen für die Textgrenzen zurück ... klein relativ zu den Werten tv.getWidth()
und tv.getHeight()
... auch wenn die Textgröße viel größer als die Breite oder Höhe der TextView
ist. vielleicht
Mögliche Duplikat: http://stackoverflow.com/a/7875656/435605 –
möglich Duplikat [Auto Scale Textview Text innerhalb Bounds anpassen] (http://stackoverflow.com/Fragen/5033012/auto-Scale-Textview-Text-to-fit-in-bounds) –
Diese Lösung ist ordentlich: [Skalieren von Text in einer Ansicht zu passen?] [1] [1]: http://StackOverflow.com/a/7259136/3857562 –