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)

Другие вопросы по тегам