Android绘图 xml 未在 Android 工作室中渲染

AndroidPlot xml not rendering in Android studio

AndroidPlot XYPlot 不会在 xml 预览中呈现。我正在使用 AndroidPlot 0.6.1。我的 libs 文件夹中有 jar。我将它作为 Gradle 脚本中的依赖项。此外,我能够编译 运行 应用程序并查看图表。

虽然必须 运行 应用程序才能看到简单的视觉变化,但这是非常乏味的。我看了 Maven quickstart 视频,我看到创建者 Nick Fellows 能够看到预览。

这是预览中的堆栈跟踪:

java.lang.AssertionError at android.content.res.BridgeResources.getDimension(BridgeResources.java:345) at com.androidplot.util.Configurator.parseFloatAttr(Configurator.java:145) at com.androidplot.util.Configurator.inflateParams(Configurator.java:236) at com.androidplot.util.Configurator.configure(Configurator.java:322) at com.androidplot.util.Configurator.configure(Configurator.java:286) at com.androidplot.Plot.loadAttrs(Plot.java:371) at com.androidplot.Plot.init(Plot.java:316) at com.androidplot.Plot.<init>(Plot.java:249) at com.androidplot.xy.XYPlot.<init>(XYPlot.java:150) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 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.rInflate_Original(LayoutInflater.java:806) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) at android.view.LayoutInflater.rInflate(LayoutInflater.java:782) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 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.compute(RenderTask.java:497) at com.android.tools.idea.rendering.RenderTask.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 com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel.run(AndroidDesignerEditorPanel.java:480) 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.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.run(Alarm.java:351) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745)

我注意到每当我删除自定义 xml 属性(如下)时,我都可以预览图表。不过,这意味着我无法通过预览按照我想要的方式设置图形样式。

androidPlot.titleWidget.labelPaint.textSize="@dimen/title_font_size" androidPlot.graphWidget.rangeLabelPaint.textSize="@dimen/range_tick_label_font_size" androidPlot.legendWidget.textPaint.textSize="@dimen/legend_text_font_size"

经过进一步研究,我还注意到只有当 xml 属性设置为等于其他资源时才会发生这种情况,例如="@dimen/title_font_size" 或 ...title="@string/test_string"。如果它是 ="15sp" 和 "test",则预览工作正常。预览适用于硬编码项目。您如何使用资源参数进行预览?

AndroidPlot XYPlot 运行 gradle 版本

dependencies {
    compile 'com.androidplot:androidplot-core:0.6.1'
}

在项目中添加库

首先,您肯定不希望将 jar 放在 libs 目录中,同时将其作为 Gradlee 依赖项包含在内。我建议只使用 Gradle 依赖项。

关于您的问题,Configurator 在 IDE 预览中并不总是能很好地发挥作用,并且不能保证有效。好消息是该库的新版本刚刚发布 (0.9.3),其中包含许多新的 Styleable 属性,包括您列出的项目的属性。更新你的依赖然后:

androidPlot.titleWidget.labelPaint.textSize="@dimen/title_font_size"
androidPlot.graphWidget.rangeLabelPaint.textSize="@dimen/range_tick_label_font_size"
androidPlot.legendWidget.textPaint.textSize="@dimen/legend_text_font_size"

变成:

ap:labelTextSize="@dimen/title_font_size"
ap:rangeLabelTextSize="@dimen/range_label_font_size"
ap:legendTextSize="@dimen/legend_text_font_size"