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

Почему это?

4b9b3361

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

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

this.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);

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

137
ответ дан 17 февр. '11 в 20:34
источник

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

18
ответ дан 17 февр. '11 в 20:33
источник

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

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

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

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

setTextSize (TypedValue.COMPLEX_UNIT_SP, 18)

3
ответ дан 23 июня '16 в 13:14
источник