Android布局渲染报错:ACTION_SCROLL_IN_DIRECTION字段缺失求助
问题描述
我开发的包含RecyclerView的应用中,近期activity_main.xml布局出现渲染问题,报错java.lang.NoSuchFieldError: ACTION_SCROLL_IN_DIRECTION。已知Android官方论坛指出该问题可能源于androidx.core:core:1.12.0的bug,但升级至1.13.0-alpha01后问题仍未解决,求可行解决思路。
附activity_main.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" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:paddingBottom="5dp" tools:context=".MainActivity" > <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar_main" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_scrollFlags="scroll|enterAlways" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > <androidx.appcompat.widget.AppCompatImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/action_logo" android:title="@string/action_logo" android:contentDescription="@string/action_logo" android:src="@drawable/ic_toolbar_logo_foreground" android:background="#FFFFFF" android:gravity="start" android:clickable="true" android:focusable="true" app:showAsAction="always" /> </androidx.appcompat.widget.Toolbar> </com.google.android.material.appbar.AppBarLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="com.google.android.material.appbar. AppBarLayout$ScrollingViewBehavior" android:layout_marginStart="6dp" android:layout_marginLeft="6dp" android:layout_marginTop="5dp" android:layout_marginEnd="6dp" android:layout_marginRight="6dp" tools:context=".MainActivity" android:background="@color/colorFlLabelFinal" > <androidx.appcompat.widget.AppCompatTextView android:id="@+id/filterListTV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_marginStart="14dp" android:layout_marginTop="4dp" android:layout_toStartOf="@+id/sortListTV" android:text="@string/filter" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/text_primary" android:textStyle="italic" app:drawableLeftCompat="@drawable/ic_filter_list_white_24dp" app:drawableStartCompat="@drawable/ic_filter_list_white_24dp" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/quickListTV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="6dp" android:text="@string/quicklist" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/text_primary" android:textStyle="bold" android:tooltipText="sort quicklist by default" tools:targetApi="o" /> <androidx.appcompat.widget.AppCompatTextView android:id="@+id/sortListTV" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_marginTop="4dp" android:layout_marginEnd="14dp" android:text="@string/sort" android:textAppearance="?android:attr/textAppearanceMedium" android:textColor="@color/text_primary" android:textStyle="italic" app:drawableEndCompat="@drawable/ic_sort_white_24dp" app:drawableRightCompat="@drawable/ic_sort_white_24dp" /> <include layout="@layout/content_main" android:layout_below="@+id/quickListTV" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/button_add_note" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_add" android:contentDescription="@string/newcardbutton" /> </androidx.coordinatorlayout.widget.CoordinatorLayout>
完整报错堆栈
java.lang.NoSuchFieldError: ACTION_SCROLL_IN_DIRECTION at androidx.core.view.accessibility.AccessibilityNodeInfoCompat$Api34Impl.getActionScrollInDirection(AccessibilityNodeInfoCompat.java:5592) at androidx.core.view.accessibility.AccessibilityNodeInfoCompat$AccessibilityActionCompat.<clinit>(AccessibilityNodeInfoCompat.java:748) at com.google.android.material.appbar.AppBarLayout$BaseBehavior.updateAccessibilityActions(AppBarLayout.java:1846) at com.google.android.material.appbar.AppBarLayout$BaseBehavior.setHeaderTopBottomOffset(AppBarLayout.java:2082) at com.google.android.material.appbar.AppBarLayout$BaseBehavior.setHeaderTopBottomOffset(AppBarLayout.java:1458) at com.google.android.material.appbar.HeaderBehavior.setHeaderTopBottomOffset(HeaderBehavior.java:158) at com.google.android.material.appbar.AppBarLayout$BaseBehavior.onLayoutChild(AppBarLayout.java:1792) at com.google.android.material.appbar.AppBarLayout$Behavior.onLayoutChild(AppBarLayout.java:1439) at com.google.android.material.appbar.AppBarLayout$BaseBehavior.onLayoutChild(AppBarLayout.java:1458) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout_Original(CoordinatorLayout.java:953) at androidx.coordinatorlayout.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java) at android.view.View.layout_Original(View.java:23694) at android.view.View_Delegate.layout(View_Delegate.java:91) at android.view.View.layout(View.java:23680) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout_Original(View.java:23694) at android.view.View_Delegate.layout(View_Delegate.java:91) at android.view.View.layout(View.java:23680) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103) at android.view.View.layout_Original(View.java:23694) at android.view.View_Delegate.layout(View_Delegate.java:91) at android.view.View.layout(View.java:23680) at android.view.ViewGroup.layout(ViewGroup.java:6413) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332) at android.widget.FrameLayout.onLayout(FrameLayout.java:270) at android.view.View.layout_Original(View.java:23694) at android.view.View_Delegate.layout(View_Delegate.java:91) at android.view.View.layout(View.java:23680) at android.view.ViewGroup.layout(ViewGroup.java:6413) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:377) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:450) at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:122) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:701) at com.android.tools.idea.rendering.RenderTask.lambda$inflate$8(RenderTask.java:848) at com.android.tools.idea.rendering.RenderExecutor$runAsyncActionWithTimeout$3.run(RenderExecutor.kt:200) at com.android.tools.idea.rendering.RenderExecutor$PriorityRunnable.run(RenderExecutor.kt:298) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)
解决思路
统一依赖版本,排除冲突:检查项目中所有依赖的androidx.core版本,避免混合使用不同版本。可在gradle中强制指定统一版本:
configurations.all { resolutionStrategy.force 'androidx.core:core:1.11.0' // 选用稳定版本避开1.12.0的bug }也可直接降级到
androidx.core:core:1.11.0,同时确保Material库版本与core版本兼容。匹配Material Design库版本:报错源于
AppBarLayout的无障碍逻辑,需保证com.google.android.material:material库版本与androidx.core版本匹配。例如core用1.11.0时,material库可选用1.11.0或兼容的稳定版本,防止版本不匹配引发API调用错误。清理缓存并重建项目:Android Studio缓存可能导致依赖未正确更新,执行
File -> Invalidate Caches... -> Invalidate and Restart,之后重新构建项目,确保新依赖包被正确引入。修正布局中的行为引用:布局中RelativeLayout的
layout_behavior属性值存在换行,可能导致布局编辑器无法正确识别,修正为:app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"临时绕过预览问题:若仅布局预览报错不影响运行,可暂时在布局编辑器中选择API 33及以下版本进行预览,避开API 34相关的无障碍字段问题。
内容的提问来源于stack exchange,提问作者AJW

