Codevalley
Codevalley

Reputation: 4651

Error: Expected resource of type styleable [ResourceType] error

Take a look at this code snippet. I am getting an error with the last line, because I am passing an 'index' instead of a resource. I thought it was a lint issue and tried to suppress it. Then I noticed I am getting this error only when I building for release. It works fine when building for debug. I am totally clueless. Can anyone throw some light into what I am doing wrong.

//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); 

Upvotes: 31

Views: 17242

Answers (4)

Simon
Simon

Reputation: 2066

@StyleableRes int index = 1;

mPaddingRight = ta.getDimensionPixelSize(index, 0); 

Upvotes: 12

Anthony Cannon
Anthony Cannon

Reputation: 1273

So the way I fixed this in Kotlin is the following: (thanks to 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()
}

Upvotes: 4

Vadim Star
Vadim Star

Reputation: 57

TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.paddingLeft, outValue, true);
int paddingLeft = outValue.data;

Repeat the same for android.R.attr.paddingRight

Upvotes: 0

Joe3112
Joe3112

Reputation: 1008

I had the same issue when trying to build a signed apk. Solved it by adding @SuppressWarnings("ResourceType") to suppress the warning, now it works fine.

Upvotes: 62

Related Questions