You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android布局渲染报错:ACTION_SCROLL_IN_DIRECTION字段缺失求助

解决布局渲染报错:java.lang.NoSuchFieldError: 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:34:54