2012-02-29 8 views
122

Я создаю текстовое изображение и динамически добавляю его в макет. Я использую метод textView.setTextSize(18) для установки размера текста. Я протестировал его на планшете Samsung и обнаружил, что размер шрифта слишком мал для этого экрана, после чего я изменил текст на 25, но он слишком большой для эмулятора (480 * 800). Моя проблема заключается в том, чтобы установить размер текста динамически, чтобы он соответствовал всем экранам.Как установить размер текста текстового вида динамически для разных экранов

+6

, но этот вопрос название совершенна в сравнении с дублируют – vnshetty

+1

@vnshetty спасибо, изм. – MKJParekh

ответ

147

Вы должны использовать папки ресурсов, таких как

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> 
+0

Можете ли вы дать мне пример для записи файла размерности .xml – Nishant

+7

Вероятно, нет необходимости в квалификаторе DPI, если размер указан в sp, поскольку они масштабируются по плотности экрана (и предпочтительный размер шрифта пользователя). –

+0

Разве DP не лучше SP? Будет ли выше работа для этой проблемы: http://stackoverflow.com/questions/18497760/having-an-issue-with-textsize-within-textview – Si8

220

EDIT: И как я Поиск по StackOverflow теперь я нашел Этот вопрос является Дубликат:: This и This

Вам необходимо использовать еще один fu nction setTextSize(unit, size) с блоком SP, как это,

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f); 

Пожалуйста, прочитайте больше для TypedValue константы.

+0

Я думаю, что ваш ответ не очень хорош. Лучше использовать значение from dimens.xml –

+6

только этот способ работает для меня, другие методы делают текст очень большим! – zdd

+0

Работал для меня, спасибо за это. –

-2

Я думаю, вы должны использовать метод textView.setTextSize (float size), чтобы установить размер текста. textView.setText (arg), используемый для установки текста в текстовом представлении.

+0

Размер текста Android всегда будет указывать в sp, а не в значениях dp или float. –

2

В 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); 
+0

Как вы можете настроить размер большого формата? –

62

Там, вероятно, нет необходимости использовать определители в 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() и он будет круглым и конвертировать в нераскрытый дробное значение.

36

После долгого времени ударил это, и, наконец, решить, как это

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

Почему TypedValue.COMPLEX_UNIT_PX и теперь TypedValue.COMPLEX_UNIT_SP? – portfoliobuilder

+0

Спасибо, Это было полезно для меня. – MyMy

-8
float currentSize = textEdit.getTextSize(); // default size 
float newSize = currentSize * 2.0F; // new size is twice bigger than default one 
textEdit.setTextSize(newSize); 
+0

Я не вижу никакого рассмотрения размера экрана в этом ответе. –

+0

На мой взгляд, речь идет о размере шрифта. Поэтому я не понимаю, почему вы жалуетесь на отсутствие ссылок на размер sceen. По умолчанию шрифт имеет соответствующий размер в большинстве случаев. Поэтому лучше подумать о размере шрифта с точки зрения большего/меньшего размера по умолчанию, т. Е. Независимо от размера экрана. Поэтому я написал решение, которое можно использовать для установки размера шрифта относительно размера шрифта по умолчанию. – buratino