【发布时间】:2018-09-05 20:19:05
【问题描述】:
我在 Ubuntu 18.04.1 上使用 Android Studio 3.1.4。我想快速创建主(默认)活动的 UI,所以我打开了布局编辑器。发生了一些错误。然后我尝试添加一个按钮:它似乎没有显示在蓝图中(ConstraintLayout 也很奇怪地显示)。
类似的 StackOverflow 问题 - Android 支持库
在 StackOverflow 中提出了类似的问题。答案是使用不同版本的 Android 支持库。目前,我正在使用这个版本:
implementation 'com.android.support:appcompat-v7:28.0.0-rc01'(文件:build.gradle(Module: app))。
确实,即使 Android Studio 推荐我使用28.0.0-rc02,我也没有在此列表中看到它:https://mvnrepository.com/artifact/com.android.support/design?repo=google。
顺便说一句,我也遇到了28.0.0-rc02 提到的所有错误。在简历中,我遇到了28.0.0-rc01(当前使用)和28.0.0-rc02 的所有这些错误。我暂时没有尝试其他版本。
使用implementation 'com.android.support:appcompat-v7:27.1.1
有了implementation 'com.android.support:appcompat-v7:27.1.1',所有的问题都迎刃而解了。然而:
这不是最后一个版本(https://mvnrepository.com/artifact/com.android.support/design?repo=google 表示最后一个版本是:
28.0.0-rc01,Android Studio 表示它是28.0.0-rc02- 两个错误)Android studio 用红色下划线我的
implementation指令如下:
打开布局编辑器时出错
- 渲染问题
加载 AppCompat ActionBar 失败,出现未知错误。
- 无法实例化以下类
- android.support.v7.widget.ActionBarContainer(打开类,显示异常,清除缓存) - android.support.v7.widget.ActionBarContextView(打开类,显示异常,清除缓存) - android.support.v7.app.WindowDecorActionBar(打开类,显示异常,清除缓存)
异常详情:
java.lang.ClassNotFoundException: android.view.View$OnUnhandledKeyEventListener 在 org.jetbrains.android.uipreview.ModuleClassLoader.load(ModuleClassLoader.java:180) 在 com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:61) 在 org.jetbrains.android.uipreview.ModuleClassLoader.findClass(ModuleClassLoader.java:118) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 org.jetbrains.android.uipreview.ModuleClassLoader.loadClass(ModuleClassLoader.java:213) 在 android.support.v7.widget.ActionBarContainer.(ActionBarContainer.java:62) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:481) 在 org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:264) 在 org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:222) 在 com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:209) 在 android.view.BridgeInflater.loadCustomView(BridgeInflater.java:337) 在 android.view.BridgeInflater.loadCustomView(BridgeInflater.java:348) 在 android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:248) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 在 android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:863) 在 android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:72) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:837) 在 android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:515) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:423) 在 com.android.layoutlib.bridge.bars.BridgeActionBar.(BridgeActionBar.java:89) 在 com.android.layoutlib.bridge.bars.AppCompatActionBar.(AppCompatActionBar.java:68) 在 com.android.layoutlib.bridge.impl.Layout.createActionBar(Layout.java:277) 在 com.android.layoutlib.bridge.impl.Layout.(Layout.java:161) 在 com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:288) 在 com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:384) 在 com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193) 在 com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:544) 在 com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:678) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
蓝图问题 - 我的 UI 中有什么?
目前,除了根组件(ConstraintLayout 实例),您可以看到(请注意,ConstraintLayout 在蓝图中似乎表示为一个很小的正方形 - 这是一个蓝图问题,不是吗?):
如果我在蓝图中拖放一个带有文本“TEST TEST TEST”的按钮,我会得到这个(请注意,按钮......并没有真正出现,只有一个奇怪的东西显示在正方形内) :
我在这个广场上点击了几次,里面有一个奇怪的东西。我得到了这个新异常:
ConstraintLayout 中缺少约束
此视图不受垂直约束:在运行时它将跳转到顶部,除非您添加垂直约束布局编辑器允许您将小部件放置在画布上的任何位置,并使用设计时属性(例如 layout_editor_absoluteX )。这些属性不会在运行时应用,因此如果您在设备上推送布局,小部件可能会出现在与编辑器中显示的位置不同的位置。要解决此问题,请通过从边缘连接拖动来确保小部件同时具有水平和垂直约束。
我的问题
在所有这些错误和异常中,我有点迷失了。我应该做些什么?我正在再次阅读文档(https://developer.android.com/training/basics/firstapp/building-ui),但他们似乎没有这种奇怪的行为(我说的是在蓝图中显示我的按钮的问题以及我在这个问题中复制/粘贴的异常)。
重要修改
我应该使用哪个版本的 Android 支持库?特别是:我应该怎么做才能使用最新版本? (rc-1 或 rc-2 - Android Studio 推荐使用 rc-2,但 https://mvnrepository.com/artifact/com.android.support/design?repo=google 中没有出现此选项)
【问题讨论】:
-
你为什么要如此糟糕地使用那些候选版本?使用稳定版不是更好吗?
-
@RoddyoftheFrozenPeas 当我想使用
27.1.1而不是28.0.0-rc01(根据mvnrepository.com/artifact/com.android.support/… 的最新版本)而不是28.0.0-rc02(根据Android Studio 的最新版本)时,会出现另一个问题(并替换所有其他问题):请参阅“类似 StackOverflow 问题 - Android 支持库 > 使用implementation 'com.android.support:appcompat-v7:27.1.1”。 -
28.0.0-rc02 是 候选版本。这就是RC的意思。这意味着它仍在开发中,尚未完成错误测试,因此您可能会遇到不会出现在 28.0.0 最终版本中的问题。这不是最新版本,它只是最新的可用开发分支。
-
这可能对我有帮助:stackoverflow.com/a/52020244/4409113 另外,在您编辑的问题的第二个选项中,如果您设置
27.1.1,您还需要在您的build.gradle中设置compilesdkversion所以我建议使用我已经链接的答案。 -
嗯,是的。但通常没有充分的理由使用稳定版本以外的任何东西,除非您专门尝试利用错误修复或新功能。这就是为什么我问为什么使用 RC 如此重要。
标签: java android android-studio ubuntu