カスタム属性を使用してカスタム複合ビューを作成しました。カスタム属性の1つはドローアブルであり、使用したいファイルはベクタードローアブルです。
val typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0)
val iconDrawable = typedArray.getDrawable(R.styleable.CustomView_icon_drawable)
XmlPullParserExceptionが発生し続けます:バイナリXMLファイルの行#1:無効なドローアブルタグベクトル
どうしてこれなの?
Android 4.4(API 20)以降、ベクタードローアブルがサポートされています。したがって、build.gradleファイルの最小APIレベル(minSdkVersion
)が設定されている場合20未満までは、サポートライブラリを使用していることを確認してください。
サポートライブラリを有効にするには、アプリレベルに次の行を追加しますbuild.gradle:
Android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
参照のタイプとしてattrs.xmlで属性を定義します。
<declare-styleable name="CustomView">
<attr name="icon_drawable" format="reference" />
</declare-styleable>
最後に、.xmlレイアウトファイルで指定されたドローアブルのインスタンスを取得できるようにするには、ドローアブルリソースIDを取得し、サポートクラスContextCompat
を使用してこのドローアブルのインスタンスを作成します
final int drawableResId = typedArray.getResourceId(R.styleable.CustomView_icon_drawable, -1);
final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableResId)