web-dev-qa-db-fra.com

Erreur: ressource attendue de type styleable [ResourceType] error

Jetez un coup d'œil à cet extrait de code… .. Je reçois une erreur avec la dernière ligne car je passe un 'index' au lieu d'une ressource. Je pensais que c’était un problème de peluches et j’ai essayé de le supprimer ..__ Ensuite, j’ai remarqué que je n’obtiens cette erreur que lors de la compilation. Cela fonctionne bien lors de la construction pour le débogage. Je suis totalement désemparé. Quelqu'un peut-il éclairer un peu ce que je fais mal?.

//Get paddingLeft, paddingRight
        int[] attrsArray = new int[]{
                Android.R.attr.paddingLeft,  // 0
                Android.R.attr.paddingRight, // 1
        };
        TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
        if (ta == null) return;
        mPaddingLeft = ta.getDimensionPixelSize(0, 0);
        mPaddingRight = ta.getDimensionPixelSize(1/*error here*/, 0); 
26
Codevalley

J'avais le même problème lorsque j'essayais de créer un apk signé . Je l'ai résolu en ajoutant @SuppressWarnings("ResourceType") pour supprimer l'avertissement, maintenant tout fonctionne correctement.

58
Joe3112
@StyleableRes int index = 1;

mPaddingRight = ta.getDimensionPixelSize(index, 0); 
7
Simon

Donc, la façon dont j'ai corrigé cela dans Kotlin est la suivante: (merci à Simons post)

companion object {
    private val attributes = intArrayOf(
            Android.R.attr.paddingLeft,
            Android.R.attr.paddingTop,
            Android.R.attr.paddingBottom,
            Android.R.attr.paddingRight)
}

init {
    val arr = context.obtainStyledAttributes(attrs, attributes)

    @StyleableRes
    var i = 0

    val leftPadding = arr.getDimensionPixelOffset(i++, 0)
    val topPadding = arr.getDimensionPixelOffset(i++, 0)
    val rightPadding = arr.getDimensionPixelOffset(i++, 0)
    val bottomPadding = arr.getDimensionPixelOffset(i, 0)

    arr.recycle()
}
1
Anthony Cannon
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(Android.R.attr.paddingLeft, outValue, true);
int paddingLeft = outValue.data;

Répétez la même chose pour Android.R.attr.paddingRight

0
Vadim Star