La définition de textSize dans la vue personnalisée entraîne un texte énorme

J'appelle ce qui suit dans le constructeur de ma vue personnalisée:

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

Il est censé définir le texte et la taille du texte pour 2 champs de texte.

J'ai ce qui suit dans mon attr.xml en plus des formats de chaîne pour le contenu du texte (qui fonctionne bien).

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

Lorsque j'utilise cette vue et que je définis la taille du texte en utilisant une dimension via 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"
            />

Le texte finit par être beaucoup plus grand que prévu. Je ne mets que 10 et 12sp respectivement, et les tailles de texte sont plus proches de comme 30sp.

Quelqu'un peut-il voir ce que je fais mal? Dois-je faire quelque chose avec DisplayMetrics pour m'assurer que les choses sont mises à l'échelle correctement?

Edit: Ajout de quelques précisions

La dimension est captée. Le texte change lorsque je définis les différentes tailles de texte en utilisant mon attribut personnalisé (en xml). J'ai aussi essayé d'utiliser getDimensionPixelSize.

C'est comme si le calcul / La récupération de dimension était erroné. 1sp (ou dp) changement entraîne une forte changement.

28
demandé sur loeschg 2014-10-20 22:43:56

1 réponses

Essayez ce qui suit à la place:

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);
}
40
répondu plackemacher 2014-10-21 15:28:31