Frage

sagen, ich habe ein Textview einer bestimmten Größe (doesn‘ t wirklich egal, was ... fill_parent, 20DIP, was auch immer). Ist es möglich, den Text zu sagen, zu schrumpfen / wachsen in der Größe, ohne den verfügbaren Raum passen eine Menge Mathematik zu tun?

War es hilfreich?

Lösung

Nicht, dass ich mir bewusst bin, tut mir leid.

Andere Tipps

Nun, es ist ein wenig einfacher als „viel komplexer Mathematik“, aber es gibt einen Hack Lösung, die ich verwenden für diese, die praktikabel ist, wenn die Breite des Textes nicht zu weit weg von der Breite des Textview.

    // HACK to adjust text width
    final int INITIAL_TEXTSIZE = 15;
    final int TEXTVIEW_WIDTH = textviewBackground.getIntrinsicWidth(); // I use the background image to find the width, but you can use a fixed value or whatever other method you prefer.
    final String text = ...;
    textView.setText( text );

    int size = INITIAL_TEXTSIZE;
    while( textview.getPaint().measureText(text) > TEXTVIEW_WIDTH )
        textview.setTextSize( --size );

Wenn die Breite des Textes deutlich anders sein kann als die Breite des Textview, könnte es besser sein, eine binäre Suche statt einer linearen Suche zu verwenden, um die richtige Schriftgröße zu finden.

Nicht dieses Wort ist eine ideale Lösung, aber es ist ein sinn ein, wenn Sie oft nicht Ihre Textgröße anpassen müssen. Wenn Sie häufig benötigen, um Ihre Textgröße anpassen, könnte es besser sein, einige komplexe Mathematik zu tun.

habe ich versucht, fast alle der oben genannten und die meisten ausgefallen einschließlich der obersten. Die einfachste und effektivste ich fand, war von emmby aber festgestellt, dass Sie die erste Textgröße eingestellt hatte. Hier ist eine Verbesserung seiner wo Sie brauchen keine Textgröße überhaupt angeben:

  final String text = "HELP";

  TextView tvFlash = (TextView) findViewById(R.id.tvFlash);

  DisplayMetrics metrics = getResources().getDisplayMetrics();
  int width = metrics.widthPixels;
  int height = metrics.heightPixels;

  tvFlash.setText(text);
  tvFlash.setTextSize(TypedValue.COMPLEX_UNIT_PX, 1);

  int size = 1; 

  do
  {
    float textWidth = tvFlash.getPaint().measureText(text);

    if (textWidth < width)
      tvFlash.setTextSize(++size);
    else
    {
      tvFlash.setTextSize(--size);
      break;
    }
  }while(true);

U kann die Idee Schriftgröße Wert für eine Textview berechnen. Das ist die Schriftgröße, die es, ohne zu groß füllen. Die Formel lautet:

fontSize = (TextView Height) * (width DPI / height DPI) / (Screen Width * Screen Height);

Die Breite und Höhe DPI kann durch Überschreiben der onConfigurationChanged Methode in Ihrer Tätigkeit erworben werden, und mit newConfig.screenWidthDp und newConfig.screenHeightDp.

Die Bildschirmgröße in Pixel kann über die folgende Hilfsfunktion erworben werden

// Get Screen Size
static public Point getScreenSize(Activity aActivity)
{
    Display display = aActivity.getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    return size;
}

Ich berechne nur diesen Wert bei Bedarf (in onConfigurationChanged) und schieben Sie es bis zu einem gewissen statischen Hilfsklasse. Dann, wenn ein Textview Bedürfnis bestimmt die Schriftgröße zu verwenden, was es sie zieht diese Klasse aus.

Es funktioniert, aber vielleicht nicht die einfachste Lösung sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top