Domanda

Dire che ho un TextView di un formato particolare (non importa cosa...fill_parent, 20dip, a prescindere).È possibile dire che il testo di compattazione/crescere in termini di dimensioni per adattarsi allo spazio disponibile senza fare un po ' di matematica?

È stato utile?

Soluzione

Non che io sono consapevole, mi spiace.

Altri suggerimenti

Beh, è un po ' più semplice rispetto a "un sacco di complessi di matematica", ma c'è un trucco soluzione che uso per questo che è realizzabile se la larghezza del testo non è troppo lontano dalla larghezza della 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 );

Se la larghezza del testo può essere significativamente diverso rispetto alla larghezza del vostro TextView, potrebbe essere meglio assumere un binario di ricerca invece di una ricerca lineare per trovare la giusta dimensione del carattere.

Non dicendo che questa è una soluzione ideale, ma è un espediente se non spesso bisogno di regolare la vostra textsize.Se avete bisogno di frequente e di regolare il vostro textsize, potrebbe essere meglio fare un po di matematica complesso.

Ho provato quasi tutto di cui sopra e la maggior parte non è riuscito tra cui quella superiore. Il più semplice e più efficace che ho trovato era di emmby ma ha trovato che si doveva impostare il TEXTSIZE iniziale. Ecco un miglioramento rispetto al suo, dove non è necessario specificare alcun TEXTSIZE a tutti:

  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 può calcolare il valore della dimensione del font idea per un TextView. Questa è la dimensione del carattere che riempirà senza essere troppo grande. La formula è:

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

La larghezza e l'altezza DPI può essere acquisita mediante l'override del metodo onConfigurationChanged nella vostra attività, e l'utilizzo di newConfig.screenWidthDp e newConfig.screenHeightDp.

Le dimensioni dello schermo in pixel può essere acquisita tramite la seguente funzione di supporto

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

Ho appena calcolare questo valore, se necessario (in onConfigurationChanged) e spingerlo in una certa classe di supporto statica. Poi, quando un TextView ha bisogno di determinare le dimensioni del font da utilizzare, lo tira fuori di questa classe.

Funziona, ma potrebbe non essere la soluzione più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top