Если я назначу целочисленное значение для изменения определенного текстового размера TextView с использованием java-кода, значение интерпретируется как пиксель (px). Теперь кто-нибудь знает, как назначить его в sp?Как назначить размер текста в значении sp с помощью java-кода
ответ
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Пример:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
Объект DisplayMetrics
позволяет преобразовывать пиксели и масштабированные пиксели с помощью scaledDensity
attribute.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
Это потребует масштабного коэффициента плотности экрана во внимание, но не масштабный фактор текста, который пользователь может указали через настройки. Я считаю, что решение Santosh учитывает этот фактор, тогда как в этом фрагменте нет. – greg7gkb
Но иногда вы не можете использовать метод @Santosh, например, когда пишете Paint в холсте. Тогда этот метод подходит и работает очень хорошо, поэтому большие пальцы вверх для этих двух ответов! – byemute
@ greg7gkb не соответствует действительности, документация говорит, что '' 'можно настроить меньшими приращениями во время выполнения на основе предпочтений пользователя для размера шрифта''', поэтому размер шрифта ** будет ** учитываться. –
По умолчанию setTextSize, без единиц работы в SP (весы пиксела)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
На основе исходного кода setTextSize
:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
Я строй этой функции для calulating любой Demension к пикселям:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Где блок что-то вроде TypedValue.COMPLEX_UNIT_SP
.
Последний способ - спасатель жизни. – Ajibola
Когда принятый ответ не работает (например, при работе с краской), вы можете использовать:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
Благодаря @John Leehey и @PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp/density);
Дело в том, если вы определяете R.dimen.desired_sp до 25 в вашем dimen.xml
- на не-HD устройства: desiredSp еще 25, плотность = 1
- на HD устройств (например, Nexus 7 второго поколения): desiredSp становится 50 иш, плотность = 2
уборщик и более многоразовый подход
определить размер текста в dimens.xml
файл внутри res/values/
каталоге:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
, а затем применить его к TextView
:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
Пожалуйста, объясните, как будет полезно настроить размер текста в качестве значения пикселя (COMPLEX_UNIT_PX). OP хочет «назначить размер текста в sp значение» – 0X0nosugar
, если вы используете 'COMPLEX_UNIT_PX', вам нужно разделить плотность. –
Я думаю, что это потому, что getDimension уже преобразовал 'dp' в 'px' –
Это код обращенного PX в SP формат. 100% Работает
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
- 1. Ошибка Android textView? Максимальный размер текста в sp
- 2. Android, почему размер текста отличается для всех устройств, даже если указан один размер текста в sp?
- 3. Как измерить размер текста с помощью DWrite?
- 4. Как получить размер переменной DECLAREd в SP?
- 5. Размер анимации текста с помощью Excel VBA
- 6. Как уменьшить размер текста в ячейке с помощью iTextSharp?
- 7. Как изменить размер текста в заголовке с помощью html
- 8. Как изменить размер текста страниц с помощью mupdf в android
- 9. Определить размер значков в SP на MapView
- 10. Изменить размер текста на планшетах
- 11. Как получить размер текста в SP (масштабированный пиксель) непосредственно из TextView?
- 12. Рисование текста с помощью CGContextShowGlyphsAtPoint - как получить размер шрифта?
- 13. Как изменить размер XAML с помощью динамического текста
- 14. как увеличить размер текста ListBox с помощью GWT
- 15. Изменить размер текста в теге ввода текста?
- 16. Как установить размер scrollview как размер текста?
- 17. Как получить размер текста и аналогичные настройки с помощью CF?
- 18. Получение текста выбора варианта, основанного на значении
- 19. Размер текста для текста UITextView
- 20. Размер текста в Navbar
- 21. Изменить размер текста в виде списка с помощью кнопки ActionBar
- 22. Как получить размер текста RichEdit в Delphi
- 23. Изменить размер текста в Textbutton
- 24. размер текста в scrollview
- 25. Как передать значение динамически в sp с помощью java?
- 26. Как назначить гибкий размер кнопки изображения?
- 27. Как добавить перевод текста с помощью resValue
- 28. Как установить размер текста с плавающей меткой?
- 29. Как отрегулировать размер текста аккордеона с контентом
- 30. Изменить размер текста с div
Поскольку SP означает масштабированные * пиксели *, вам нужно уменьшить размер по плотности экрана. Это легко сделать следующим образом: SCREEN_DENSITY = getResources(). GetDisplayMetrics(). Плотность; yourView.setTextSize (TypedValue.COMPLEX_UNIT_SP, (wishTextHeightInSP/SCREEN_DENSITY); – PeteH
Решение не сработало для меня, когда я попытался собрать SP из ресурсов. PeteH, вы меня на правильном пути! Следующее сделало трюк для меня : ... float textSize = getResources(). GetDimension (R.dimen.textsize)/getResources(). GetDisplayMetrics(). Плотность; myTextView.setTextSize (TypedValue.COMPLEX_UNIT_SP, textSize); –
большое спасибо :) \ –