Я создаю текстовое представление и динамически добавляю его в макет. Я использую метод textView.setTextSize(18)
для установки размера текста. Я протестировал его на планшете samsung и обнаружил, что размер шрифта слишком мал для этого экрана, тогда я изменил текст на 25, но он слишком большой для эмулятора (480 * 800). Моя задача - установить размер текста динамически, чтобы он соответствовал всем экранам.
Как установить текстовый размер динамического текста для разных экранов
Ответ 1
Вы должны использовать папки ресурсов, такие как
values-ldpi
values-mdpi
values-hdpi
И напишите размер текста в файле 'dimensions.xml' для каждого диапазона.
И в java-коде вы можете установить размер текста с помощью
textView.setTextSize(getResources().getDimension(R.dimen.textsize));
Примеры размеров .xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="textsize">15sp</dimen>
</resources>
Ответ 2
EDIT: И теперь, когда я ищу в StackOverflow, я нашел Этот вопрос повторяется: Этот и Это
Вам нужно использовать другую функцию setTextSize(unit, size)
с единицей SP
, как это,
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
Подробнее читайте TypedValue.
Ответ 3
В этом случае, вероятно, нет необходимости использовать квалификаторы 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.e у вас есть измерения пикселей, с одной стороны, и sp unit
с другой, чтобы исправить это:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));
Заметьте, вы также можете использовать
getResources().getDimensionPixelSize(R.dimen.textSize);
вместо getDimension()
, и он будет округлен и преобразован в дробное значение.
Ответ 4
После долгого времени ударил это и, наконец, решил как это
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>
Ответ 5
В 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);
Ответ 6
Я думаю, вам нужно использовать метод textView.setTextSize(float size), чтобы установить размер текста. textView.setText(arg), используемый для установки текста в текстовом представлении.
Ответ 7
float currentSize = textEdit.getTextSize(); // default size
float newSize = currentSize * 2.0F; // new size is twice bigger than default one
textEdit.setTextSize(newSize);