Масштабировать текст в режиме просмотра?
Я не считаю, что это существует, но хотелось бы проверить. Я хотел бы установить размер текста 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-модулей на информацию о плотности пикселей в текущем экране, но как только это будет сделано, она должна почти гарантировать решение вашей проблемы для всех случаев.
Ответ 4
Вот хорошее упакованное решение для автоматической подгонки текста: https://github.com/grantland/android-autofittextview