O MaterialCardView trava com o material: 1.1.0


9

Estou usando o MaterialCardView como meu cardviewlayout. Agora, o Android-studio começou a me mostrar que, em vez de atual implementation "com.google.android.material:material:1.0.0", eu deveria atualizar para1.1.0

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/edit_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:layout_margin="@dimen/activity_vertical_margin">

  <com.google.android.material.card.MaterialCardView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:cardCornerRadius="8dp"
      app:cardElevation="8dp">

      <...more layout>
</com.google.android.material.card.MaterialCardView>
</LinearLayout>

com 1.1.0, estou recebendo falha Error inflating class com.google.android.material.card.MaterialCardView

Então, eu tenho 3 casos:

  1. manter 1.0.0e usar MaterialCardView(funcionando, mas não preferido)
  2. Atualize para 1.1.0(ou 1.2.0-alpha) e use androidx.CardView(funcionando, mas não preferido)
  3. Atualize 1.1.0e altere o MaterialCardView( preferencial, mas não está funcionando )

Desde que eu quero ir com a opção # 3, e eu não tenho nenhuma solução, alguém pode dar uma pista?

Atualizar meu estilo (eu tenho estilo e noite de estilo também. Aqui estou postando o styleúnico):

<resources>

  <!-- Base application theme. -->
  <style name="AppTheme" parent="Theme.AppCompat.DayNight">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
  </style>

  <style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
  </style>

  <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

  <style name="ThemeOverlay.AppCompat.navTheme">
    <!-- Color of text and icon when SELECTED -->
    <item name="colorPrimary">#ffffff</item>
    <!-- Background color when SELECTED -->
    <item name="colorControlHighlight">@color/colorPrimary</item>

  </style>

</resources>

E aqui está o erro (do Logcat )

2020-02-12 13:34:18.171 12562-12562/com.example.phocast E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.phocast, PID: 12562
    android.view.InflateException: Binary XML file line #10 in com.example.phocast:layout/fragment_place: Binary XML file line #10 in com.example.phocast:layout/fragment_place: Error inflating class com.google.android.material.card.MaterialCardView
    Caused by: android.view.InflateException: Binary XML file line #10 in com.example.phocast:layout/fragment_place: Error inflating class com.google.android.material.card.MaterialCardView
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:854)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
        at com.example.phocast.MainActivity.onOptionsItemSelected(MainActivity.java:555)
        at android.app.Activity.onMenuItemSelected(Activity.java:4137)
        at androidx.fragment.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:383)
        at androidx.appcompat.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:219)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109)
        at androidx.appcompat.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:64)
        at androidx.appcompat.widget.Toolbar$1.onMenuItemClick(Toolbar.java:207)
        at androidx.appcompat.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981)
        at androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625)
        at androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
     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:248)
        at com.google.android.material.internal.ThemeEnforcement.checkMaterialTheme(ThemeEnforcement.java:222)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:150)
        at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:81)
        at com.google.android.material.card.MaterialCardView.<init>(MaterialCardView.java:124)
        at com.google.android.material.card.MaterialCardView.<init>(MaterialCardView.java:114)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at android.view.LayoutInflater.createView(LayoutInflater.java:854) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:481) 
        at com.example.phocast.MainActivity.onOptionsItemSelected(MainActivity.java:555) 
        at android.app.Activity.onMenuItemSelected(Activity.java:4137) 
        at androidx.fragment.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:383) 
        at androidx.appcompat.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:219) 
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109) 
        at androidx.appcompat.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:109) 
        at androidx.appcompat.app.ToolbarActionBar$2.onMenuItemClick(ToolbarActionBar.java:64) 
        at androidx.appcompat.widget.Toolbar$1.onMenuItemClick(Toolbar.java:207) 
        at androidx.appcompat.widget.ActionMenuView$MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:781) 
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:840) 
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158) 
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:991) 
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:981) 
        at androidx.appcompat.widget.ActionMenuView.invokeItem(ActionMenuView.java:625) 
        at androidx.appcompat.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:151) 
        at android.view.View.performClick(View.java:7125) 
        at android.view.View.performClickInternal(View.java:7102) 
        at android.view.View.access$3500(View.java:801) 
        at android.view.View$PerformClick.run(View.java:27336) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.app.ActivityThread.main(ActivityThread.java:7356) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 
2020-02-12 13:34:18.620 12562-12584/com.example.phocast I/example.phocas: Background young concurrent copying GC freed 110384(4259KB) AllocSpace objects, 46(1212KB) LOS objects, 41% free, 7792KB/12MB, paused 1.092ms total 150.548ms
2020-02-12 13:34:18.692 12562-12562/com.example.phocast I/Process: Sending signal. PID: 12562 SIG: 9

Você pode adicionar detalhes de com.google.android.material.card.MaterialCardViewseu layout e também incluir o log de erros?
Md. Asaduzzaman

Olá, obrigado pela sua resposta rápida.
BaRud 12/02

Olá, obrigado pela sua rápida reprodução. O log de erros não é muito útil, pois diz apenas que não é possível aumentar o arquivo binário xml.
BaRud 12/02

Então você pode adicionar seu xml completo?
Md. Asaduzzaman

Publique seu arquivo XML completo e o arquivo Build, gradle aqui em: paste.ofcode.org
InsaneCat

Respostas:


1

você também pode mantê-lo no seu materialcardview:

 <com.google.android.material.card.MaterialCardView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:cardCornerRadius="8dp"
     **** android:theme="@style/Theme.MaterialComponents.Light"  *****
      app:cardElevation="8dp">

Ou você pode usar a solução desejada para quem está criando um novo aplicativo, conforme sugerido na resposta do DeepLathia .
Machado

9

O erro está no stacktrace:

Causado por: java.lang.IllegalArgumentException: o estilo neste componente exige que o tema do seu aplicativo seja Theme.MaterialComponents (ou um descendente).

Com a versão 1.1.0, você deve herdar de a Material Components theme.

Mude o tema do seu aplicativo para

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
  <!-- ....  -->
</style>

Obrigado. Isso está funcionando, exceto pelo fato de que a cor da fonte ativa tablayoutmudou de cor (de branco para violeta), acho que como um artefato de transição do AppCompat para o MaterialsTheme. Eu não defini essa cor da fonte explicitamente. Dado que isso está além do escopo da pergunta atual, vou criar uma nova questão. Você se importará se eu marcar isso para você aqui?
BaRud 12/02

@BaRud. Obrigado, sem problemas.
Gabriele Mariotti


1
obrigado! dor de cabeça resolvida :-)
Grisgram 04/03

2

tente a versão mais recente

implementation 'com.google.android.material:material:1.2.0-alpha03'

style.xml:

<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>
    </style>

no seu xml:

<com.google.android.material.card.MaterialCardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

</com.google.android.material.card.MaterialCardView>

1

Você precisa alterar o AppTheme para ter o tema principal como descendente do MaterialComponent

No seu caso específico, altere o AppTheme de

  <style name="AppTheme" parent="Theme.AppCompat.DayNight">

para

  <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

deve corrigir o problema.


0

Se depois de mudar o tema para Theme.MaterialComponentsno styles.xml não funcionar, então certifique-se de ter adicionado estilo tag na MaterialCard .

style="@style/Widget.MaterialComponents.CardView"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.