Я создаю текстовое изображение и динамически добавляю его в макет. Я использую метод textView.setTextSize(18)
для установки размера текста. Я протестировал его на планшете Samsung и обнаружил, что размер шрифта слишком мал для этого экрана, после чего я изменил текст на 25, но он слишком большой для эмулятора (480 * 800). Моя проблема заключается в том, чтобы установить размер текста динамически, чтобы он соответствовал всем экранам.Как установить размер текста текстового вида динамически для разных экранов
ответ
Вы должны использовать папки ресурсов, таких как
values-ldpi
values-mdpi
values-hdpi
И напишите размер текста в файле «dimensions.xml» для каждого диапазона.
И в коде Java вы можете установить размер текста с
textView.setTextSize(getResources().getDimension(R.dimen.textsize));
Образец dimensions.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textsize">15sp</dimen>
</resources>
Можете ли вы дать мне пример для записи файла размерности .xml – Nishant
Вероятно, нет необходимости в квалификаторе DPI, если размер указан в sp, поскольку они масштабируются по плотности экрана (и предпочтительный размер шрифта пользователя). –
Разве DP не лучше SP? Будет ли выше работа для этой проблемы: http://stackoverflow.com/questions/18497760/having-an-issue-with-textsize-within-textview – Si8
EDIT: И как я Поиск по StackOverflow теперь я нашел Этот вопрос является Дубликат:: This и This
Вам необходимо использовать еще один fu nction setTextSize(unit, size)
с блоком SP
, как это,
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
Пожалуйста, прочитайте больше для TypedValue константы.
Я думаю, что ваш ответ не очень хорош. Лучше использовать значение from dimens.xml –
только этот способ работает для меня, другие методы делают текст очень большим! – zdd
Работал для меня, спасибо за это. –
Я думаю, вы должны использовать метод textView.setTextSize (float size), чтобы установить размер текста. textView.setText (arg), используемый для установки текста в текстовом представлении.
Размер текста Android всегда будет указывать в sp, а не в значениях dp или float. –
В Style.xml заранее определить стиль:
<style name="largeText">
<item name="android:textAppearance">@android:style/TextAppearance.Large.Inverse</item>
<item name="android:textStyle">bold</item>
</style>
в коде:
text.setTextAppearance(context, R.style.largeText);
Как вы можете настроить размер большого формата? –
Там, вероятно, нет необходимости использовать определители в ldpi
, mdpi
или hdpi
в этом случае.
Когда вы определяете измерение в файле ресурсов, вы включаете блок измерения. Если вы используете sp-модули, они масштабируются в соответствии с плотностью экрана, поэтому текст на 15sp должен выглядеть примерно одинаково на экранах различной плотности.
(Реальная плотность экрана устройства не будет точно соответствовать, поскольку Android обобщает плотность экрана в 120, 160, 240, 320, 480 and 640 dpi
групп.)
При вызове getResources().getDimension(R.dimen.textsize)
он вернет размер в пикселях. При использовании sp он будет масштабироваться по плотности экрана,
Вызов setText(float)
устанавливает размер в sp units
. В этом случае возникает вопрос,
i.е у вас есть измерения пикселей с одной стороны и sp unit
с другой стороны, чтобы исправить это сделать:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));
Примечание Вы можете также использовать
getResources().getDimensionPixelSize(R.dimen.textSize);
вместо getDimension()
и он будет круглым и конвертировать в нераскрытый дробное значение.
После долгого времени ударил это, и, наконец, решить, как это
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));
создать dimen
папку как этот res/values/dimensions.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textsize">8sp</dimen>
</resources>
Почему TypedValue.COMPLEX_UNIT_PX и теперь TypedValue.COMPLEX_UNIT_SP? – portfoliobuilder
Спасибо, Это было полезно для меня. – MyMy
float currentSize = textEdit.getTextSize(); // default size
float newSize = currentSize * 2.0F; // new size is twice bigger than default one
textEdit.setTextSize(newSize);
Я не вижу никакого рассмотрения размера экрана в этом ответе. –
На мой взгляд, речь идет о размере шрифта. Поэтому я не понимаю, почему вы жалуетесь на отсутствие ссылок на размер sceen. По умолчанию шрифт имеет соответствующий размер в большинстве случаев. Поэтому лучше подумать о размере шрифта с точки зрения большего/меньшего размера по умолчанию, т. Е. Независимо от размера экрана. Поэтому я написал решение, которое можно использовать для установки размера шрифта относительно размера шрифта по умолчанию. – buratino
, но этот вопрос название совершенна в сравнении с дублируют – vnshetty
@vnshetty спасибо, изм. – MKJParekh