Подтвердить что ты не робот

Настройка textSize в пользовательском представлении приводит к огромному тексту

Я вызываю следующее в конструкторе моего пользовательского представления:

private void style(Resources.Theme theme, AttributeSet attrs) {
    TypedArray a = theme.obtainStyledAttributes(
            attrs,
            R.styleable.StackedTextView,
            0, 0);

    try {
        DebugTool.assertTrue(holdr != null, "View holder has not been properly intialized.");
        String line1 = a.getString(R.styleable.StackedTextView_line1);
        setLine1(line1);
        String line2 = a.getString(R.styleable.StackedTextView_line2);
        setLine2(line2);

        line1Size = a.getDimension(R.styleable.StackedTextView_line1_textSize, 20);
        line2Size = a.getDimension(R.styleable.StackedTextView_line2_textSize, 20);
        if (line1Size > 0) {
            holdr.textLine1.setTextSize(line1Size);
        }
        if (line2Size > 0) {
            holdr.textLine2.setTextSize(line2Size);
        }

    } finally {
        a.recycle();
    }
}

Предполагается установить размер текста и текста для 2 текстовых полей.

У меня есть следующее в my attr.xml в дополнение к строковым форматам текстового контента (который отлично работает).

    <attr name="line1_textSize" format="dimension" />
    <attr name="line2_textSize" format="dimension" />

Когда я использую это представление и задаю размер текста с помощью измерения через xml,

        <com.me.app.view.component.StackedTextView
            android:id="@+id/overview_total_reviews"
            app:line1="40"
            app:line2="Rating"
            style="@style/OverviewStackedText"
            app:line1_textSize="10sp"
            app:line2_textSize="12sp"
            />

текст заканчивается значительно большим, чем ожидалось. Я только устанавливаю 10 и 12 ср соответственно, а размеры текста ближе к 30 с.

Может ли кто-нибудь увидеть, что я делаю неправильно? Нужно ли что-то делать с DisplayMetrics, чтобы убедиться, что все правильно масштабировано?

Изменить: добавление некоторых пояснений

Измерение подбирается. Текст меняется, когда я устанавливаю разные размеры текста, используя свой собственный атрибут (в xml). Я также пробовал использовать getDimensionPixelSize.

Как будто неправильное вычисление/измерение. Изменение 1sp (или dp) приводит к значительным изменениям.

4b9b3361

Ответ 1

Попробуйте вместо этого:

line1Size = a.getDimensionPixelSize(R.styleable.StackedTextView_line1_textSize, 0);
line2Size = a.getDimensionPixelSize(R.styleable.StackedTextView_line2_textSize, 0);

if (line1Size > 0) {
    holdr.textLine1.setTextSize(TypedValue.COMPLEX_UNIT_PX, line1Size);
}
if (line2Size > 0) {
    holdr.textLine2.setTextSize(TypedValue.COMPLEX_UNIT_PX, line2Size);
}