94

Below are my dependencies

implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

My layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffff"
    android:fitsSystemWindows="true">


    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottomBar"
        style="@style/Widget.MaterialComponents.BottomAppBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:backgroundTint="@color/colorPrimary"
        app:fabAlignmentMode="center"
        app:fabCradleMargin="10dp"
        app:fabCradleVerticalOffset="4dp"
        app:navigationIcon="@drawable/ic_drawer" >

    </com.google.android.material.bottomappbar.BottomAppBar>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/bottomBar"
        app:srcCompat="@drawable/ic_apps" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

The Above code is working fine for me

But when i update the dependencies of material design

implementation 'com.google.android.material:material:1.1.0-alpha01'

I'm getting below error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{neel.com.bottomappbar/neel.com.bottomappbar.MainActivity}: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.google.android.material.bottomappbar.BottomAppBar
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2485)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545)
        at android.app.ActivityThread.access$1100(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
     Caused by: android.view.InflateException: Binary XML file line #11: Binary XML file line #11: Error inflating class com.google.android.material.bottomappbar.BottomAppBar
        at android.view.LayoutInflater.inflate(LayoutInflater.java:543)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at neel.com.bottomappbar.MainActivity.onCreate(MainActivity.kt:16)
        at android.app.Activity.performCreate(Activity.java:6358)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:157) 
        at android.app.ActivityThread.main(ActivityThread.java:5602) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 
     Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class com.google.android.material.bottomappbar.BottomAppBar
        at android.view.LayoutInflater.createView(LayoutInflater.java:649)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:768)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:708)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:839)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:802)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
        at neel.com.bottomappbar.MainActivity.onCreate(MainActivity.kt:16) 
        at android.app.Activity.performCreate(Activity.java:6358) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:157) 
        at android.app.ActivityThread.main(ActivityThread.java:5602) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at android.view.LayoutInflater.createView(LayoutInflater.java:623)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:768) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:708) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:839) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:802) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:519) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:427) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
        at neel.com.bottomappbar.MainActivity.onCreate(MainActivity.kt:16) 
        at android.app.Activity.performCreate(Activity.java:6358) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545) 
        at android.app.ActivityThread.access$1100(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:157) 
        at android.app.ActivityThread.main(ActivityThread.java:5602) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:774) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652) 
     Caused by: java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.MaterialComponents (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:240)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:215)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:143)
        at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:78)
        at com.google.android.material.bottomappbar.BottomAppBar
Kostas Drak
  • 3,222
  • 6
  • 28
  • 60
Goku
  • 9,102
  • 8
  • 50
  • 81

13 Answers13

122

There is some issue with material:1.1.0-alpha01

A simple solution is to change the parent theme

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
       
</style>
Dharman
  • 30,962
  • 25
  • 85
  • 135
Goku
  • 9,102
  • 8
  • 50
  • 81
  • 6
    Issue still exists in `com.google.android.material:material:1.1.0`. – Manuel Feb 07 '20 at 14:35
  • 2
    I got the same issue in `com.google.android.material:material:1.1.0` but solved that by changing the parent theme. – Alirezaarabi Apr 05 '20 at 17:49
  • This is working but might change your design a bit. – Allen Jun 12 '20 at 12:36
  • Solution #1 works. Issue still persists wit Solution #2. – SimpleGuy Jun 19 '20 at 04:53
  • 2
    This changes view of components, so design.. And this is what said by Android Studio anyway.. This is not good solution – Samir Alakbarov Aug 09 '20 at 21:53
  • It's recommended to use `.Bridge` Theme, such as `Theme.MaterialComponents.Light.DarkActionBar.Bridge`, as you can use Material Design components without changing your app theme. See https://material.io/develop/android/docs/getting-started#bridge-themes – Zhou Hongbo Feb 16 '22 at 15:54
75

Extend your base app Theme from Material Components Bridge theme. It extends AppCompat theme, but adds all necessary stuff.

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.Bridge">
    <!-- ... -->
</style>

Both Theme.MaterialComponents and Theme.MaterialComponents.Light have .Bridge themes:

Theme.MaterialComponents.Bridge
Theme.MaterialComponents.Light.Bridge
Theme.MaterialComponents.NoActionBar.Bridge
Theme.MaterialComponents.Light.NoActionBar.Bridge
Theme.MaterialComponents.Light.DarkActionBar.Bridge

It allows you to keep using latest version of the library, but avoid a lot of UI issues, caused by migration to pure Material Component theme

https://material.io/develop/android/docs/getting-started/#bridge-themes

demaksee
  • 1,108
  • 11
  • 16
55

Adding theme directly to widget works too. E.g.:

    <com.google.android.material.button.MaterialButtonToggleGroup
        android:id="@+id/toggle_button_group"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:theme="@style/Theme.MaterialComponents.Light"> <======== THIS

Checked with min. SDK ver. 21.

æ-ra-code
  • 2,140
  • 30
  • 28
14

None of these worked for me. Must do these two things.

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme -->
</style>

and

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/nav_view"
    app:theme="@style/Theme.MaterialComponents"
user3561494
  • 2,164
  • 1
  • 20
  • 33
10

|> 1: Define the following style in style.xml:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme -->
</style>

|> 2: In the manifest.xml file, use from above style:

<application
    android:hardwareAccelerated="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"> <!-- IMPORTANT (This was my mistake) -->
</application>

|> 3: Choose a style for your component:

<com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bottomBar"
        style="@style/Widget.MaterialComponents.BottomAppBar"
...
>
</com.google.android.material.bottomappbar.BottomAppBar>
Saeed
  • 3,294
  • 5
  • 35
  • 52
  • 1
    Thank you so much. I believe this one should be the best answer because you are the only one who mentioned that the change should be made in style.xml file. (which is in the values folder) – Liker777 Mar 09 '21 at 03:55
7

We have change Gradle dependencies and style code my case working fine

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="android:activatedBackgroundIndicator">@drawable/drawer_list_selector</item>
    <item name="android:textColorSecondary">@color/black_overlay</item>
    <!--<item name="android:windowBackground">@drawable/nav_menu_background</item>-->
</style>

Gradle Dependencies

implementation 'com.google.android.material:material:1.1.0-alpha06'
Saeed
  • 3,294
  • 5
  • 35
  • 52
Sonu Kumar
  • 969
  • 1
  • 11
  • 36
3

You can also add theme to CoordinatorLayout, such as

<androidx.coordinatorlayout.widget.CoordinatorLayout 
    android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar.Bridge"
Zhou Hongbo
  • 1,297
  • 13
  • 25
2

I had this problem when I was testing the TextInputEditText which was inside a TextInputLayout with style that had parent parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox"

And the solution was to add the theme in the tests as follows

val scenario = launchFragmentInContainer<Fragment>(themeResId = R.style.Theme_APP)
Bacar Pereira
  • 1,025
  • 13
  • 18
1

If you're having this issue and you're instantiating a view programmatically:

Make sure not to use getApplicationContext() when requiring a Context instance, but instead use this or HolderActivity.this (replace HolderActivity with your own activity) if inside a anonymous function.

For example I was having this issue with

CustomAlertDialogBuilder builder = new CustomAlertDialogBuilder(getApplicationContext());

where I should be using

CustomAlertDialogBuilder builder = new CustomAlertDialogBuilder(MyActivity.this);
1

if you are adding a view into WindowManager you must set style into your layout like this

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/parentView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@style/Theme.YOUR_THEME"
    android:orientation="vertical">

</LinearLayout>
Mahdi Zareei
  • 1,299
  • 11
  • 18
0

I have an error when I create a chip in code, This issue makes the app stop working, so I solved with creating a chip with context like your activity name like below

Chip chip = new Chip(YourNameActivity.this);

It works for me, my app use dependency as com.google.android.material:material:1.4.0

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
pipo
  • 11
  • 1
0

I had this problem and fixed it by changing the theme "Theme.MaterialComponents.Light.NoActionBar" with "Theme.MaterialComponents.Light.NoActionBar.Bridge" and this works for me.

0

Changing Gradle Dependencies to this did the work!

implementation 'androidx.navigation:navigation-fragment:2.3.5'
implementation 'androidx.navigation:navigation-ui:2.3.5'

P.S. Android Studio Dolphin | 2021.3.1 Patch 1

pumawo
  • 11
  • 3