Android TextView setTextSize неправильно увеличивает размер текста
Это в расширении TextView. getTextSize()
а также setTextSize()
не переопределяются, я не расширяю эти методы. Программирование в 1.6, API уровень 4.
Цикл в этом коде приводит к умножению размера на 1,5 при каждой итерации, например, если размер первоначально считывает 200 из getTextSize
, затем setTextSize(size)
называется, getTextSize
звонил снова читает 300
public void shrinkTest() {
float size = this.getTextSize();
while (size > 8) {
this.setTextSize(size);
size = this.getTextSize();
}
}
Почему это?
3 ответа
Хех, проблема смешанных юнитов. Кажется, немного нелогичным, но это легко исправить. Метод по умолчанию setTextSize(float)
предполагает, что вы вводите sp
единицы (масштабированные пиксели), а getTextSize()
Метод возвращает точный размер пикселя.
Вы можете исправить это с помощью альтернативного setTextSize(TypedValue, float)
, вот так:
this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);
Это позволит вам работать с одними и теми же юнитами.
setTextSize()
а также getTextSize()
работать с разными подразделениями. Параметр для set() не зависит от плотности "масштабированных пикселей", тогда как get() возвращает обычные старые пиксели.
Передать единицы с размером, используя TypedValue, как показано ниже:
TypedValue.COMPLEX_UNIT_PX // Пиксели
TypedValue.COMPLEX_UNIT_SP // Масштабированные пиксели
TypedValue.COMPLEX_UNIT_DIP // Независимые от устройства пиксели
setTextSize(TypedValue.COMPLEX_UNIT_SP, 18)