MaterialCardView gặp sự cố với vật liệu: 1.1.0


9

Tôi đang sử dụng MaterialCardView làm cardviewbố cục của mình . Bây giờ, Android-studio bắt đầu cho tôi thấy rằng thay vì hiện tại implementation "com.google.android.material:material:1.0.0", tôi nên cập nhật lên1.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>

với 1.1.0, tôi đang gặp sự cố Error inflating class com.google.android.material.card.MaterialCardView

Vì vậy, tôi có 3 trường hợp:

  1. bám sát 1.0.0và sử dụng MaterialCardView(làm việc, nhưng không được ưa thích)
  2. Cập nhật lên 1.1.0(hoặc 1.2.0-alpha) và sử dụng androidx.CardView(làm việc, nhưng không được ưu tiên)
  3. Cập nhật 1.1.0và thay đổi MaterialCardView( ưa thích, nhưng không hoạt động )

Vì tôi muốn đi với tùy chọn # 3 và tôi không có giải pháp nào, ai có thể đưa ra manh mối không?

Cập nhật Phong cách của tôi (Tôi cũng có phong cách & phong cách đêm. Ở đây tôi stylechỉ đăng bài ):

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

Và đây là lỗi (từ 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

Bạn có thể thêm chi tiết com.google.android.material.card.MaterialCardViewtrong bố cục của bạn và cũng bao gồm nhật ký lỗi không?
Md. Asaduzzaman

Xin chào, cảm ơn bạn đã trả lời nhanh chóng.
BaRud

Xin chào, cảm ơn bạn đã phát lại nhanh chóng. Nhật ký lỗi không hữu ích lắm, vì nó chỉ nói không thể làm tăng tệp nhị phân xml.
BaRud

Sau đó, bạn có thể thêm xml đầy đủ của bạn?
Md. Asaduzzaman

Đăng tệp XML đầy đủ của bạn và Xây dựng, phân loại tệp tại đây trong: paste.ofcode.org
InsaneCat

Câu trả lời:


1

bạn cũng có thể giữ nó trong tài liệu của mình.

 <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">

Hoặc bạn có thể sử dụng giải pháp mong muốn cho những người tạo ra một ứng dụng mới như được đề xuất trong câu trả lời của DeepLathia .
Machado

9

Lỗi nằm ở stacktrace:

Nguyên nhân bởi: java.lang.IllegalArgumentException: Phong cách trên thành phần này yêu cầu chủ đề ứng dụng của bạn phải là Theme.M vật liệu tổng hợp (hoặc hậu duệ).

Với phiên bản 1.1.0, bạn phải kế thừa từ a Material Components theme.

Thay đổi chủ đề ứng dụng của bạn thành

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

Cảm ơn. Điều này đang hoạt động, ngoại trừ thực tế là màu phông chữ hoạt động của nó tablayoutđã thay đổi màu sắc của nó (từ màu trắng sang màu tím), tôi đoán là một vật phẩm chuyển từ AppCompat sang Vật liệuTheme. Tôi không đặt màu phông chữ đó một cách rõ ràng. Cho rằng, điều này nằm ngoài phạm vi của câu hỏi hiện tại, tôi sẽ tạo ra một vấn đề mới. Bạn có phiền nếu tôi gắn thẻ nó cho bạn ở đây không?
BaRud

@BaRud. Cảm ơn, không vấn đề gì.
Gabriele Mariotti


1
cảm ơn bạn! đau đầu đã được giải quyết :-)
Grisgram

2

thử phiên bản mới nhất

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>

trong xml của bạn:

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

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

1

Bạn cần thay đổi AppTheme để có chủ đề chính là hậu duệ của MaterialComponent

Trong trường hợp cụ thể của bạn, việc thay đổi AppTheme từ

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

đến

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

nên khắc phục sự cố.


0

Nếu sau khi thay đổi chủ đề thành Theme.MaterialComponentstrong tệp style.xml không hoạt động thì hãy đảm bảo bạn đã thêm thẻ kiểu trong MaterialCard .

style="@style/Widget.MaterialComponents.CardView"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.