web-dev-qa-db-ja.com

エラー:スタイル可能な[ResourceType]タイプのリソースが必要です

このコードスニペットをご覧ください。リソースの代わりに「インデックス」を渡すため、最後の行でエラーが発生します。私はそれが糸くずの問題だと思い、それを抑制しようとしました。その後、リリース用にビルドしているときにのみこのエラーが発生していることに気付きました。デバッグ用にビルドするときに正常に機能します。私は全く無知です。誰でも私が間違っていることに光を当てることができますか?.

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

署名済みapkを作成しようとしたときに同じ問題が発生しました。 @SuppressWarnings("ResourceType")を追加して警告を抑制することで解決しましたが、現在は正常に動作します。

58
Joe3112
@StyleableRes int index = 1;

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

したがって、Kotlinでこれを修正した方法は次のとおりです。 (Simonsの投稿に感謝)

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()
}
2
Anthony Cannon
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(Android.R.attr.paddingLeft, outValue, true);
int paddingLeft = outValue.data;

Android.R.attr.paddingRightについても同じことを繰り返します

0
Vadim Star