Jetpack Composeでマイナスの画像を表示したい
前提
こんな感じのプラス、マイナスが表示されるUIを作りたいとします。
+の表示
IconのimageVectorで、Icons.Filled.Addを指定すれば+は表示できます。
Icon(
modifier = Modifier.fillMaxSize(),
imageVector = Icons.Filled.Add,
contentDescription = "test"
)
-の表示
-は標準ではIcons.Filledの中にありません。
なんで…
対処法
とりあえず表示したい場合
build.gradle(:app)に以下を記述してmaterial-icons-extendedライブラリを追加します。
implementation("androidx.compose.material:material-icons-extended:1.7.8")
マイナス画像を使うファイルでは以下をimportします。
import androidx.compose.material.icons.filled.Remove
使えるようになりました!
ただ、この方法は推奨されていません。推奨される方法を次で説明します。
推奨される方法
そもそもデフォルトで指定できるのはMaterial IconsというGoogleの作成した膨大なアイコン集のごく一部です。
すべてのアイコンはここから見ることができます
material-icons-extendedは全てのアイコンを含む版なのですが、量が膨大なのでそのままインポートすることは推奨されていません(重すぎてアイコンのサジェストが出てこなくなったりします)。
その代わり、
- 直接依存関係として含める場合は、R8/Proguard を使用して未使用のアイコンを削除する
- 保持したいアイコンをコピーアンドペーストでローカルコピーを作成する
- Android Studio の「ベクターアセットのインポート」機能を使用する
のどれかで使用することがオススメ[1]されています。
今回は手軽そうな3番の方法を使ってみます。
-
res->New->Vector Assetをクリック
-
Asset Studioが開くので、Clip artをクリック
-
Select Iconウィンドウが出るので、検索ボックスにRemoveと入れる(上記のGoogle Fontsサイトから使いたいアイコンの名前を探してください)
-
必要があれば名前やサイズを変更
デフォルトで良いと思います。
-
drawableリソースとして追加するフォルダを選択
大抵の場合はデフォルトでOK
-
drawableフォルダにアイコンが追加されたことを確認する
-
IconのpainterにpainterResourceとして指定
material-iconsライブラリと異なり、drawableリソース扱いになるので、同じIconのComposableでもpainterを指定する方を使います。
Icon(
modifier = Modifier.fillMaxSize(),
painter = painterResource(R.drawable.outline_remove_24),
contentDescription = "test"
)
- 完成!
Discussion