Question

Dire que j'ai un TextView d'une taille particulière (n » t importe vraiment ce que ... fill_parent, 20DIP, peu importe). Est-il possible de dire le texte à rétrécir / croître en taille pour adapter l'espace disponible sans faire beaucoup de maths?

Était-ce utile?

La solution

Non pas que je suis au courant, désolé.

Autres conseils

Eh bien, il est un peu plus simple que « beaucoup de mathématiques complexes », mais il y a une solution hack j'utilise pour ce qui est réalisable si la largeur de votre texte est pas trop loin de la largeur de votre 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 );

Si la largeur de votre texte peut être sensiblement différente de la largeur de votre TextView, il pourrait être préférable d'employer une recherche binaire au lieu d'une recherche linéaire pour trouver la taille de la police à droite.

ne dis pas que c'est une solution idéale, mais il est un expédient un si vous ne devez pas souvent ajuster votre textsize. Si vous devez régler fréquemment votre textsize, il pourrait être préférable de faire un peu de mathématiques complexes.

J'ai essayé presque tous les ci-dessus et le plus échoué, y compris le haut. I la plus simple et la plus efficace était trouvé de emmby mais a constaté que vous deviez définir la textsize initiale. Voici une amélioration de son où vous n'avez pas besoin de spécifier une textsize du tout:

  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 peut calculer la valeur de la taille de la police pour une idée TextView. Telle est la taille de la police qui le remplir sans être trop grand. La formule est la suivante:

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

peut être acquise La largeur et la hauteur DPI en redéfinissant la méthode onConfigurationChanged dans votre activité, et en utilisant newConfig.screenWidthDp et newConfig.screenHeightDp.

La taille de l'écran en pixels peut être obtenue en utilisant la fonction d'assistance suivant

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

Je calcule que cette valeur au besoin (en onConfigurationChanged) et le pousser à une classe d'aide statique. Puis, quand un TextView doit déterminer quelle taille de police à utiliser, il tire de cette classe.

Il fonctionne, mais peut-être pas la solution la plus simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top