Масштабирование textSize в TextView - PullRequest
12 голосов
/ 19 февраля 2010

Скажем, у меня есть TextView определенного размера (не имеет значения, что ... fill_parent, 20dip, что угодно). Можно ли сказать, чтобы текст уменьшался / увеличивался в размере, чтобы соответствовать доступному пространству, не делая много математики?

Ответы [ 4 ]

18 голосов
/ 25 марта 2010

Что ж, это немного проще, чем "много сложных математических операций", но я использую для этого хакерское решение, которое работает, если ширина вашего текста не слишком далека от ширины вашего текстового представления. *

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

Если ширина вашего текста может значительно отличаться от ширины вашего TextView, может быть лучше использовать бинарный поиск вместо линейного поиска, чтобы найти правильный размер шрифта.

Не говорю, что это идеальное решение, но оно целесообразно, если вам не часто приходится корректировать размер текста. Если вам нужно часто корректировать размер текста, лучше выполнить сложные математические вычисления.

2 голосов
/ 30 июля 2013

Я опробовал почти все вышеперечисленное и большинство провалилось, включая топовое. Самый простой и эффективный, который я нашел, был от emmby, но обнаружил, что вы должны установить исходный текст. Вот его улучшение, в котором вам вообще не нужно указывать какой-либо текстовый размер:

  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);
0 голосов
/ 26 февраля 2013

U может вычислить значение размера шрифта идеи для TextView.Это размер шрифта, который будет заполнять его, не будучи слишком большим.Формула имеет вид:

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

DPI и ширину и высоту можно получить, переопределив метод onConfigurationChanged в своей деятельности и используя newConfig.screenWidthDp и newConfig.screenHeightDp.

Размер экранапиксели могут быть получены с помощью следующей вспомогательной функции

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

Я просто вычисляю это значение по мере необходимости (в onConfigurationChanged) и помещаю его в некоторый статический вспомогательный класс.Затем, когда TextView необходимо определить, какой размер шрифта использовать, он вытягивает его из этого класса.

Он работает, но может оказаться не самым простым решением.

0 голосов
/ 19 февраля 2010

Не то, чтобы я знал, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...