【问题标题】:AndroidPlot xml not rendering in Android studioAndroidPlot xml 未在 Android Studio 中呈现
【发布时间】:2015-11-21 22:06:34
【问题描述】:

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

虽然必须运行应用程序才能看到简单的视觉变化,但这是相当乏味的。我观看了 Maven 快速入门视频,我看到创建者 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$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 com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.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$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: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",则预览效果很好。预览适用于硬编码项目。如何通过资源参数预览它?

【问题讨论】:

    标签: java android xml androidplot


    【解决方案1】:

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

    至于您的问题,Configurator 并不总是能很好地与 IDE 预览配合使用,并且不能保证能够正常工作。好消息是该库的新版本刚刚发布 (0.9.3),其中包括许多新的 Styleable attrs,包括您列出的项目的 attrs。更新你的依赖然后:

    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"
    

    【讨论】:

      【解决方案2】:

      AndroidPlot XYPlot 使用 gradle 版本运行

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

      在项目中添加库

      【讨论】:

      • 我已添加库; jar 在我的 libs 目录中。预览不会呈现。
      • 我在 gradle 中使用过这个库...它对我来说工作正常..你不使用 lib 文件夹 jar...在 gradle 中尝试这个库....
      猜你喜欢
      • 2021-10-26
      • 2016-12-31
      • 2012-09-06
      • 2023-01-13
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      相关资源
      最近更新 更多