Масштабировать текст, чтобы соответствовать? - PullRequest
10 голосов
/ 31 августа 2011

Я не верю, что это существует, но хотел перепроверить. Я хотел бы установить размер текста TextView таким образом, чтобы он помещался в пределах заданной ширины в одну строку. Пример:

<LinearLayout
  layout_width="100dip"
  layout_height="50dip">

  <TextView
    layout_width="fill_parent"
    layout_height="wrap_content"
    textSize="fill" 
    text="fit me please!" />

</LinearLayout>

Спасибо

Ответы [ 4 ]

11 голосов
/ 31 августа 2011

Вы можете использовать TextUtils.EllipsizeCallback.Когда текст становится эллиптическим, этот обратный вызов выполняется текстовым представлением.Здесь вы можете установить размер текста меньше текущего.

РЕДАКТИРОВАНИЕ: В противном случае вы можете использовать TextUtils.ellipsize таким образом

while (mText != TextUtils.ellipsize(mText, textPaint, other params)) { 
    textpaint.setTextSize(textpaint.getTextSize() - 1);
}
4 голосов
/ 03 сентября 2011

Эта пользовательская функция должна делать это, используя TextUtils.ellipsize ...

public static void shrinkTextToFit(float availableWidth, TextView textView,
                                   float startingTextSize, float minimumTextSize) {

    CharSequence text = textView.getText();
    float textSize = startingTextSize;
    textView.setTextSize(startingTextSize);
    while (text != (TextUtils.ellipsize(text, textView.getPaint(),
                                        availableWidth, TextUtils.TruncateAt.END))) {
        textSize -= 1;
        if (textSize < minimumTextSize) {
            break;
        } else {
            textView.setTextSize(textSize);
        }
    }
}
0 голосов
/ 14 июля 2015

Вот хорошее пакетное решение для автоподбора текста: https://github.com/grantland/android-autofittextview

0 голосов
/ 31 августа 2011

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

...