How to Use Material Symbols in Jetpack Compose In Android

If you’re adding icons to a Jetpack Compose app in 2025, here’s the simple rule: don’t use the old androidx.compose.material.icons artifacts. Do use the new Material Symbols as vector drawables. This keeps your app modern and often speeds up builds.

  • The old Material Icons library is no longer maintained or recommended. It was also removed as a transitive dependency from the latest Material 3.
  • Material Symbols are the new, updated icon set. Download them as Vector Drawable XML from Google Fonts → Android tab.

Why the change?

  • Fresh look & more styles. Material Symbols are the modern replacement for the old Material Icons, with updated shapes and clear styles like Outlined, Rounded, and Sharp.
  • Faster builds, smaller apps. The old library pulled in thousands of icons you didn’t need, which could increase build time. Symbols as per-file vectors avoid that bloat.
  • Library no longer auto-added. Since Material 3 v1.4.0 (Sep 24, 2025), material-icons-core isn’t added for you—so relying on it silently is no longer an option.

The recommended way (super easy)

1) Download a Material Symbol as Vector Drawable XML

  1. Go to Google Fonts → Icons.
  2. Pick your icon and pick a style (Outlined / Rounded / Sharp).
  3. Click the Android tab and download the XML (Vector Drawable).

The Android docs explicitly recommend this approach for Compose.

2) Drop it into your project

Place the downloaded file in:
app/src/main/res/drawable/your_icon.xml

3) Use it in Compose

@Composable
fun ToolbarIcon() {
    Icon(
        painter = painterResource(R.drawable.ic_home), // your XML file
        contentDescription = "Home"
        // tint defaults to LocalContentColor; override if needed:
        // tint = MaterialTheme.colorScheme.onSurface
    )
}

That’s it. No giant icon dependency, no waiting for library updates.


Quick migration tips (from Icons.Default.*)

Before (old library):

// Old: pulls icons from androidx.compose.material.icons
Icon(imageVector = Icons.Default.Search, contentDescription = "Search")

After (Material Symbols as Vector Drawable):

// New: use your downloaded vector drawable
Icon(painter = painterResource(R.drawable.ic_search), contentDescription = "Search")

Repeat for each icon you use. You control which icons land in your APK/AAB, and builds stay snappy.


“I can’t migrate today” — what are my options?

If you absolutely can’t migrate yet, you can manually add the old icons dependency yourself (it’s no longer added automatically by Material 3). Keep in mind it’s not maintained and not recommended going forward:

dependencies {
    // Not recommended for new work
    implementation("androidx.compose.material:material-icons-core:<version>")
    implementation("androidx.compose.material:material-icons-extended:<version>")
}

Material 3 stopped auto-adding material-icons-core, so you must declare it explicitly if you rely on it. Plan to remove it soon.


Styling basics you’ll actually use

  • Size: Icon defaults to 24.dp (Material spec). Use Modifier.size(…​) to change.
  • Color: By default, Icon tints to LocalContentColor. Pass tint = …​ to override.
    All documented in the Compose Icons page.


    Handy links

    • Compose Icons documentation (official, updated Sep 25, 2025): why Symbols + how to use vectors.
    • Material 3 release notes (Sep 24, 2025): removal of material-icons-core as a transitive dependency.
    • Google Fonts – Icons (Material Symbols): download XML from the Android tab.
    • Material Symbols styles overview (Outlined/Rounded/Sharp).

    Final word

    Treat icons like any other asset: bring only what you need. Switching to Material Symbols as vector drawables gives you the latest look, fewer surprises, and often faster builds—with code that’s just as easy to read and maintain.

    upgrad

    Grab Certification On Generative AI

    Leave a Comment

    Your email address will not be published. Required fields are marked *