TChart inside LinearLayout generates “width and height must be > 0”

余生颓废 提交于 2020-01-07 02:17:30

问题


I have just started using Steema TChart on Mono for Android. I tried this simple code and it works fine:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    var tChart1 = new Steema.TeeChart.TChart(this);
    var bar1 = new Steema.TeeChart.Styles.Bar();
    tChart1.Series.Add(bar1);
    bar1.Add(3, "Pears", Color.Red);
    bar1.Add(4, "Apples", Color.Blue);
    bar1.Add(2, "Oranges", Color.Green);
    var theme = new Steema.TeeChart.Themes.BlackIsBackTheme(tChart1.Chart);
    theme.Apply();

    SetContentView(tChart1);
}

...but as soon as I try adding the chart into another view, like a LinearLayout I get the error "width and height must be > 0". Does anyone know how to solve this?

Here is the code that I tried (it works just fine if I only have the LinearLayout and the Button):

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);

    var tChart1 = new Steema.TeeChart.TChart(this);
    var bar1 = new Steema.TeeChart.Styles.Bar();
    tChart1.Series.Add(bar1);
    bar1.Add(3, "Pears", Color.Red);
    bar1.Add(4, "Apples", Color.Blue);
    bar1.Add(2, "Oranges", Color.Green);
    var theme = new Steema.TeeChart.Themes.BlackIsBackTheme(tChart1.Chart);
    theme.Apply();

    var container = new LinearLayout(this);
    container.Orientation = Orientation.Vertical;
    var b = new Button(this);
    b.Text = "Test";
    container.AddView(b);
    container.AddView(tChart1);

    SetContentView(container);
}

And here is the CallStack:

08-29 19:39:52.489 I/MonoDroid(24907): java.lang.IllegalArgumentException: width and height must be > 0
08-29 19:39:52.489 I/MonoDroid(24907):  at android.graphics.Bitmap.createBitmap(Bitmap.java:603)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.graphics.Bitmap.createBitmap(Bitmap.java:585)
08-29 19:39:52.489 I/MonoDroid(24907):  at steema.teechart.TChart.n_onDraw(Native Method)
08-29 19:39:52.489 I/MonoDroid(24907):  at steema.teechart.TChart.onDraw(TChart.java:55)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.View.draw(View.java:11025)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.View.draw(View.java:11028)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.widget.FrameLayout.draw(FrameLayout.java:450)
08-29 19:39:52.489 I/MonoDroid(24907):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2274)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewRootImpl.draw(ViewRootImpl.java:2041)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1647)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2459)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.os.Looper.loop(Looper.java:137)
08-29 19:39:52.489 I/MonoDroid(24907):  at android.app.ActivityThread.main(ActivityThread.java:4514)
08-29 19:39:52.489 I/MonoDroid(24907):  at java.lang.reflect.Method.invokeNative(Native Method)
08-29 19:39:52.489 I/MonoDroid(24907):  at java.lang.reflect.Method.invoke(Method.java:511)
08-29 19:39:52.489 I/MonoDroid(24907):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
08-29 19:39:52.489 I/MonoDroid(24907):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
08-29 19:39:52.489 I/MonoDroid(24907):  at dalvik.system.NativeStart.main(Native Method)

回答1:


This is because you need to provide LayoutParams when adding the chart to your View, for example:

container.AddView(tChart1, new ViewGroup.LayoutParams(300, 400));

or:

container.AddView(tChart1, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent));



来源:https://stackoverflow.com/questions/12192428/tchart-inside-linearlayout-generates-width-and-height-must-be-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!