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();
    }
}

Почему это?

Ответ 1

Хе, проблема смешанных единиц. Кажется немного нелогичным, но это легко исправить. Метод по умолчанию setTextSize(float) предполагает, что вы вводите единицы sp (масштабированные пиксели), а метод getTextSize() возвращает точный размер пикселя.

Вы можете исправить это, используя альтернативный setTextSize(TypedValue, float), например:

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

Это позволит вам работать с одними и теми же блоками.

Ответ 2

setTextSize() и getTextSize() работают с разными модулями. Параметр set() не зависит от плотности "масштабированных пикселей", тогда как get() возвращает простые старые пиксели.

Ответ 3

передать единицы измерения с помощью TypedValue, как показано ниже:

TypedValue.COMPLEX_UNIT_PX//Пиксели

TypedValue.COMPLEX_UNIT_SP//Масштабируемые пиксели

TypedValue.COMPLEX_UNIT_DIP//Независимые устройства

setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)