簡體   English   中英

將 AppCompat 'layout_behavior' 與 '@string/appbar_scrolling_view_behavior' 一起使用會引發異常

[英]Using AppCompat 'layout_behavior' with '@string/appbar_scrolling_view_behavior' throws exception

我有一個奇怪的問題,使用 AppCompat Lib 22.2 並引入了新的內容:layout_behavior

如果我將它與值 "@string/appbar_scrolling_view_behavior" 一起使用,如Android Design Support Lib此處所述,應用程序將因以下異常而終止:

Could not inflate Behavior subclass android.support.design.widget.Settings
     Caused by: java.lang.RuntimeException: Could not inflate Behavior subclass android.support.design.widget.Settings
     Caused by: java.lang.ClassNotFoundException: android.support.design.widget.Settings
     Caused by: java.lang.NoClassDefFoundError: android/support/design/widget/Settings
     Caused by: java.lang.ClassNotFoundException: android.support.design.widget.Settings

如果我改為:

app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"

一切正常。

我錯過了什么?

對於遇到此異常並使用 proguard 的其他人 - 您需要添加以下 proguard 規則:

-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**

或者,如果您不想保留所有可以使用的設計庫組件:

-keepattributes *Annotation*
-keep public class * extends android.support.design.widget.CoordinatorLayout.Behavior { *; }
-keep public class * extends android.support.design.widget.ViewOffsetBehavior { *; }

發生這種情況的另一個原因是當您擴展FloatingActionButton.Behavior並且您沒有 (Context, AttributeSet) 構造函數時。 設計庫 v. 23.0.1 發生在我身上

只需將此構造函數添加到您的子類中:

public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
    super();
}

您應該為您的項目添加設計庫。

compile 'com.android.support:design:22.2.0'

檢查示例https://github.com/chrisbanes/cheesesquare

對於僅在使用 proguard 時才使用此錯誤的開發人員,只需在 proguard 規則文件中添加一行:

-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; }

將我的項目遷移到 Androidx 后,我今天遇到了這個錯誤。

我的 string.xml 文件中似乎有一個字符串。 我不得不刪除這條線。

<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>

它應該只鏈接到 values.xml 文件而不是 string.xml 文件。

app:layout_behavior="@string/appbar_scrolling_view_behavior" 應該只鏈接到 values.xml (Ctrl+B)

<string name="appbar_scrolling_view_behavior" translatable="false">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM