Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Jetpack Compose Icons doesn't contain some of the material icons

There're many oft-used material icons in androidx.compose.material.icons.Icons but some are missing. Just as an example there is no print icon.

...  import androidx.compose.material.Icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Menu  // ok import androidx.compose.material.icons.filled.Print // error, unresolved reference  @Composable fun IconsExample() {     Icon(Icons.Filled.Menu, "menu")   // ok     Icon(Icons.Filled.Print, "print") // error, unresolved reference } 

What is the simplest way to use those missing icons in an app?

like image 351
Valeriy Katkov Avatar asked Jan 11 '21 10:01

Valeriy Katkov


People also ask

Is jetpack compose the future of Android UI?

Jetpack Compose comes with all the functionality needed to build a rich and responsive application UI and features full interoperability with current Android views, making it easy for developers to implement in existing projects.

Is jetpack compose ready for production?

Jetpack Compose is stable, ready for production, and continues to add the features you've been asking us for. We've been thrilled to see tens of thousands of apps start using Jetpack Compose in production already and we can't wait to see what you'll build!


Video Answer


1 Answers

There's a separate dependency material-icons-extended which contains the full list of material icons, just add it into your app's build.gradle

dependencies {   ...   implementation "androidx.compose.material:material-icons-extended:$compose_version" } 

Now you can use any material icon, for example:

...  import androidx.compose.material.Icon import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Menu  // ok import androidx.compose.material.icons.filled.Print // ok  @Composable fun IconsExample() {     Icon(Icons.Filled.Menu, "menu")   // ok     Icon(Icons.Filled.Print, "print") // ok } 

A note about the artifact size: Since the artifact contains all material icons for multiple themes, it's a pretty big dependency, 18MB aar as of 1.0.0-alpha10. There's a note on maven repository that recommends not to use it directly:

This module contains all Material icons. It is a very large dependency and should not be included directly.

Сonsidering that most Android projects enable code shrinking for release builds, such a large dependency won't affect the release build size but it can affect your debug build and device upload time, though I'm not sure that the influence would be significant. Actually many of compose samples use this dependency.

If only a few additional icons are required and you decided not to use material-icons-extended artifact, the icons can be easily added into your project resources using Android Studio. You can use such resource-icons like this:

...  import com.mycompany.myproject.R import androidx.compose.ui.res.painterResource  @Composable fun ResourceIconExample() {     Icon(         painter = painterResource(R.drawable.ic_baseline_print_24),         contentDescription = "print"     ) } 
like image 121
Valeriy Katkov Avatar answered Sep 30 '22 03:09

Valeriy Katkov