前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

4系端末にSVG画像を適用する方法と注意点

一応自分で試して対応は確認できたが採用はしていない。以下は必要になった場合に備えての記録。

課題

4系端末でもSVG画像を使いたいが上手く表示されなかったりアプリが落ちたりする。
どうすればよいか。

対応

参考URLの記事を読めば全て書いてあるが、
いくつかの専用の記述が必要となる。

app/build.gradle

vectorDrawablesではuseSupportLibraryを使うよと宣言

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}
ImageView

app:srcCompatをに指定する。

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/ic_search"/>
ImageView以外で使う場合

Vectorを読み込めるようにするために
ApplicationクラスまたはトップのActivityなどに以下を記述する。

static {
AppCompatDelegate.setCompatVectorFromSourcesEnabled(true);
}

また直接Vectorを指定できないので別なLayerListやInsetDarwable, SelectorなどのDrawableを経由する必要がある

<selector xmlns:android="...">
    <item android:drawable="@drawable/ic_search" />
</selector>

状態を持たなくてもいいのでとりあえず1つだけセレクターを挟む。

注意点

  • NotificationのアイコンはID指定をする必要があり、Vector画像はおそらく使えない
  • ImageView以外でVector画像を使う際の対応が煩雑。selectorなど、かえって本来不要なファイルが増える。