Android Studio 3.1.4:缺少类和显示不正确的蓝图

时间:2018-09-05 20:19:06

标签: java android android-studio ubuntu

我在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',可以解决所有问题。但是:

  1. 这不是最新版本(https://mvnrepository.com/artifact/com.android.support/design?repo=google指示最新版本为:28.0.0-rc01,Android Studio指示其为28.0.0-rc02-均为bug)

  2. Android Studio将我的implementation指令标为红色,如下所示:

enter image description here

打开布局编辑器时出错

  1. 渲染问题
  

无法加载具有未知错误的AppCompat ActionBar。

  1. 以下类无法实例化
  

-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(本机方法)处       在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)

蓝图问题-用户界面中有什么?

目前,您可以看到,根组件(ConstraintLayout实例)之外没有任何其他内容(请注意,ConstraintLayout在蓝图中似乎只是一个很小的正方形-这是一个蓝图问题,不是吗?):

enter image description here

如果我在蓝图中拖放带有文本“ TEST TEST TEST”的按钮,则会得到此提示(请注意,该按钮...并没有真正出现,只有一个奇怪的东西显示在正方形内) :

enter image description here

我在这个广场上点击了几次,里面有一个奇怪的东西。我得到了这个新的例外:

  

ConstraintLayout中缺少约束

     

此视图不受垂直约束:在运行时,除非添加垂直约束,否则它将跳到顶部。布局编辑器允许您将小部件放置在画布上的任何位置,并且它使用designtime属性(例如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中)

2 个答案:

答案 0 :(得分:1)

最新版本的支持库仍在开发中,可能包含错误

直到结束,您可以将版本降级为28.0.0-alpha1

implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'

答案 1 :(得分:0)

我对蓝图有同样的问题,我的解决方案是同时选择预览和蓝图。

还尝试添加带有xml文本的按钮并添加一些约束:

app:layout_constraintEnd_toEndOf="parent"

应该做。