我在Ubuntu 18.04.1。上使用Android Studio 3.1.4。我想快速创建主要(默认)活动的UI,所以我打开了布局编辑器。发生了一些错误。然后,我尝试添加一个按钮:该按钮似乎未在蓝图中显示(并且ConstraintLayout
也被奇怪地显示)。
在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
-均为bug)
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(本机方法)处 在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
在蓝图中似乎只是一个很小的正方形-这是一个蓝图问题,不是吗?):
如果我在蓝图中拖放带有文本“ TEST TEST TEST”的按钮,则会得到此提示(请注意,该按钮...并没有真正出现,只有一个奇怪的东西显示在正方形内) :
我在这个广场上点击了几次,里面有一个奇怪的东西。我得到了这个新的例外:
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中)
答案 0 :(得分:1)
最新版本的支持库仍在开发中,可能包含错误
直到结束,您可以将版本降级为28.0.0-alpha1
implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
答案 1 :(得分:0)
我对蓝图有同样的问题,我的解决方案是同时选择预览和蓝图。
还尝试添加带有xml文本的按钮并添加一些约束:
app:layout_constraintEnd_toEndOf="parent"
应该做。