2010-02-19 11 views
12

Powiedz, że mam TextView określonego rozmiaru (tak naprawdę nie ma znaczenia, co ... fill_parent, 20dip, cokolwiek). Czy można powiedzieć, żeby tekst się zmniejszył/powiększył, aby dopasować się do dostępnej przestrzeni bez robienia dużo matematyki?Skalowanie tekstu Rozmiar w TextView

+0

Proszę zobaczyć odpowiedź tutaj, działa całkiem dobrze: [enter Opis Link tutaj] [1] [1]: http://stackoverflow.com/questions/5033012/auto-scale-textview-text-to-fit-within-bounds – AllDayAmazing

Odpowiedz

18

Cóż, jest to trochę prostsze niż "wiele skomplikowanych matematyki", ale istnieje rozwiązanie hackowe, którego używam, aby było to wykonalne, jeśli szerokość tekstu nie jest zbyt daleko od szerokości twojego tekstu.

// 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); 

Jeśli szerokość tekstu może być znacznie różni się od szerokości swojej TextView, to może być lepiej zatrudnić przeszukiwanie binarne zamiast przeszukiwanie liniowe, aby znaleźć odpowiedni rozmiar czcionki.

Nie mówię, że jest to idealne rozwiązanie, ale jest to celowe rozwiązanie, jeśli często nie trzeba dostosowywać tekstów do swoich potrzeb. Jeśli musisz często dostosowywać teksty, lepiej wykonać skomplikowaną matematykę.

+0

+1 Bardzo ładna odpowiedź. Powinna być zaakceptowana IMO. –

0

U może obliczyć wartość rozmiaru czcionki pomysłu dla TextView. Jest to rozmiar czcionki, który wypełni go, nie będąc zbyt dużym. Formuła jest:

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

Szerokość i wysokość DPI mogą być nabywane poprzez nadpisanie metody onConfigurationChanged w swojej działalności, a przy użyciu newConfig.screenWidthDp i newConfig.screenHeightDp.

Rozmiar ekranu w pikselach można uzyskać stosując następującą funkcję pomocniczą

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

po prostu obliczyć tę wartość, ile potrzeba (w onConfigurationChanged) i przesunąć go do jakiegoś statycznego klasy pomocnika. Następnie, gdy TextView musi określić, jaki rozmiar czcionki użyć, wyciągnie go z tej klasy.

Działa, ale może nie być najprostszym rozwiązaniem.

+0

Bezużyteczne. Nie uwzględnia długości znaków. – AndroidDev

2

Wypróbowałem prawie wszystkie powyższe i najbardziej nieudane, w tym najlepsze. Najprostszy i najskuteczniejszy, jaki znalazłem, pochodzi z emmby, ale odkryłem, że musieliście ustawić początkową teksturę. Oto na jego ulepszenie, w którym nie trzeba podawać żadnych TEXTSIZE na wszystkich:

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);