【问题标题】:Android Studio: Rendering Problems with CoordinatorLayoutAndroid Studio:CoordinatorLayout 的渲染问题
【发布时间】:2015-06-15 18:50:36
【问题描述】:

当我将 CoordinatorLayout 设置为我的根元素时,当 Android Studio 呈现预览时出现以下错误。

java.lang.NoClassDefFoundError: Could not initialize class android.support.design.widget.CoordinatorLayout
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:413)
    at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105)
    at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:177)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:214)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:142)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:385)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:413)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:497)
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:485)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:894)
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:485)
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:590)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:644)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1700(AndroidLayoutPreviewToolWindowManager.java:79)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7$1.run(AndroidLayoutPreviewToolWindowManager.java:586)
    at com.intellij.openapi.progress.impl.CoreProgressManager$2.run(CoreProgressManager.java:152)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:452)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:402)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:137)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$7.run(AndroidLayoutPreviewToolWindowManager.java:581)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:351)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)

我的布局文件是这样的

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/detail_backdrop_height"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:id="@+id/img"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                android:adjustViewBounds="true"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax" />

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/detail_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/appbar_layout"
        android:layout_marginTop="-25dp"
        android:background="@color/background_light"
        android:paddingTop="36dp"
        android:scrollbars="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_below="@id/appbar_layout"
        android:layout_gravity="bottom|end"
        android:layout_marginEnd="16dp"
        android:layout_marginTop="-32dp"
        android:src="@android:drawable/ic_menu_call"
        app:layout_scrollFlags="scroll|exitUntilCollapsed" />
</android.support.design.widget.CoordinatorLayout>

这是我的 build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.godine"
        minSdkVersion 21
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
    }
}  

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:cardview-v7:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.android.support:appcompat-v7:22.2.0'

    ...
}

有人知道这里可能出了什么问题吗?

编辑 正如@deniz 在回答中已经提到的那样,预览适用于 Android Studio 的最新更新

【问题讨论】:

  • 你在 gradle 中添加了库吗??
  • 你为什么有2个命名空间(xmlns)
  • @Chandru 我更新了我的问题
  • @war_Hero 第二个命名空间用于设计支持库属性
  • 在切换到 Beta 频道或 M 预览版之前检查我的答案。

标签: android android-studio ide


【解决方案1】:

这是 Android 开源项目问题跟踪器中的一个已知问题:

https://code.google.com/p/android/issues/detail?id=175595

Android 项目成员描述的不幸解决方法是:

解决方法:尝试使用 AS v1.3 预览使用 M 预览进行渲染或使用FrameLayout 进行设计并在调试时更改为android.support.design.widget.CoordinatorLayout。

【讨论】:

    【解决方案2】:

    将 android studio 更新到最新版本 (beta) 1.3 beta version.Menu -> 'Check for updates'

    如果您无法找到测试版更新更改 android studio 设置(更新),请更新该补丁并使用 M 预览进行渲染

    尝试使用 Android M 预览渲染您的预览。

    【讨论】:

    • 谢谢你为我做的
    【解决方案3】:

    我解决了android...coordinatorlayout出现的类似错误,而不是android应用的预览:

    1- 关闭项目

    2- 重启安卓工作室

    3- 构建项目

    也许它会对某人有所帮助。

    【讨论】:

      【解决方案4】:

      我在更新到 Android Studio 4.0.1 后遇到了这个问题,并通过禁用 Experimental Layout Rendering Engine 并重新启动 Android Studio 解决了这个问题。这样做可以解决: 转到 File-&gt;Settings-&gt;Experimental-&gt;Editor-&gt; and uncheck the Use new Layout Rendering Engine 然后点击 OK 并重新启动 Android Studio。您应该会发现它可以无缝运行 希望此解决方案对某人有所帮助。

      【讨论】:

        【解决方案5】:

        等等! 不要切换到测试版。

        截至 7 月 29 日,Android Studio 1.3 已在稳定频道上发布。我检查了,可以确认新版本的 IDE 完全解决了您的问题,CoordinatorLayout 渲染。

        Android Studio 1.3 尚未在 Android 网站上发布,不过,您可以通过 IDE 菜单下载更新补丁,将您的 Android Studio 从 1.2 升级到 1.3。只需点击:

        帮助 --> 检查更新 --> 更新并重新启动

        附:您也不需要 Android M 来渲染。较低的 API 也能正常工作。

        【讨论】:

        • 我得到了 1.3 版,但仍然没有渲染 CoordinateLayout :/
        【解决方案6】:

        AppBarLayout 也有类似的问题,似乎 IDE 缓存了一些错误版本的小部件。

        File -&gt; Invalidate Caches/Restart 帮助了我。

        【讨论】:

          【解决方案7】:

          我自己又遇到了这个问题。

          我跑了clean project -> restart android studio -> build again,它对我有用。

          我认为 Android Studio 对 AndroidX 和旧的支持库有一些奇怪的缓存。

          10/10 好的构建工具。

          【讨论】:

            猜你喜欢
            • 2016-07-06
            • 2015-08-21
            • 2013-08-14
            • 2016-03-31
            • 2019-03-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多