Масштабировать текст в режиме просмотра?

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

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

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

</LinearLayout>

Спасибо

Ответ 1

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

EDIT: В противном случае вы можете использовать TextUtils.ellipsize таким образом

while (mText != TextUtils.ellipsize(mText, textPaint, other params)) { 
    textpaint.setTextSize(textpaint.getTextSize() - 1);
}

Ответ 2

Эта пользовательская функция должна это сделать, используя 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);
        }
    }
}

Ответ 3

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