SciChart® the market leader in Fast WPF Charts, WPF 3D Charts, and now iOS Charting & Android Chart Components

Welcome to the SciChart Community Forums!

Please use the forums below to ask questions about SciChart. Take a moment to read our Question asking guidelines on how to ask a good question and our support policy. We also have a tag=SciChart on Stackoverflow.com where you can earn rep for your questions!

Please note: SciChart team will only answer questions from customers with active support subscriptions. Expired support questions will be ignored. If your support status shows incorrectly, contact us and we will be glad to help.

2
1

I managed to spearate the legend from the SciChartSurface, however the way I did it is very hackish. I couldn’t find any documentation on how it is supposed to be done correctly.

The way I did it (Kotlin code):

val legend = SciChartLegend(context)
legendModifier = LegendModifier(legend)
legendModifier.setOrientation(Orientation.VERTICAL)
legendModifier.setLegendPosition(Gravity.START or Gravity.TOP, 0)
legendModifier.setSourceMode(SourceMode.AllVisibleSeries)
legendModifier.setShowSeriesMarkers(true)
legendModifier.setShowCheckboxes(true)


val modifierGroup = chartBuilder.newModifierGroup().build()
modifierGroup.childModifiers.add(legendModifier)
chartSurface.chartModifiers.add(modifierGroup)

if(legend.parent != null)
{
    (legend.parent as ViewGroup).removeView(legend)
}

val linearLayout = LinearLayout(context)
linearLayout.orientation = LinearLayout.VERTICAL
linearLayout.addView(legend)
linearLayout.addView(chartSurface)

I was surprised that passing the legend to LegendModifier constructor also adds it to it’s layout. So I had to manually remove it and add it to my LinearLayout. It does work, but as I said, it is a hackish way of doing it. My question is, how is it done correctly?

Version
v2.0.0.1884
  • You must to post comments
0
0

Hi Miha,

Well unfortunately it is a default behavior of LegendModifier and it will be hard to change because:

  1. When it is added into modifier collection it becomes part of SciChartSurface so it has access only to the chart and its subviews and it can place it only there.
  2. LegendModifier has properties which are responsible for legend placement inside parent ViewGroup and they probably won’t work properly with other ViewGroup container.

The purpose of constructor which accepts SciChartLegend is to allow customization of legend appearance (e.g. you can configure some legend properties before passing it to the modifier or you can subclass it if you want )


Alternative to using LegendModifier is creating and managing content of SciChartLegend on your own but it will require writing of code for creating and placing SciChartLegend in your app, creating LegendItemsAdapter and filling it with data from chart, creating listeners for different chart events (e.g. renderable series was added/removed, series name, color, visibility changed etc) and updating data when something in chart changes. I wouldn’t say that it would be easy to do this.


UPDATED

We’ve changed behavior of constructor which accepts SciChartLegend instance in v2.1. Now when you’re using this constructor it’s expected that legend will be placed somewhere in layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<com.scichart.charting.visuals.SciChartSurface
    android:id="@+id/chart"
    android:layout_width="fill_parent"
    android:layout_height="0dp" android:layout_weight="1" />

<com.scichart.charting.visuals.legend.SciChartLegend
    android:id="@+id/legend"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="10dp"/>

 </LinearLayout>

and then legend instance will be passed into LegendModifier:

    final LegendModifier legendModifier = new LegendModifier(legend);

In this case LegendModifier’s properties which are responsible for placing legend within chart won’t work.

To support previous case when you just need to customize SciChartLegend appearance you can use new constructor which accepts useAutoPlacement flag:

    final LegendModifier legendModifier = new LegendModifier(legend, new SeriesInfoLegendAdapter(), true);

Best regards,
Yura

  • Dinesh Sheoran
    Expecting fix above issue from scichart very soon !
  • Yura Khariton
    Actually it was fixed in v2.1 during work on pie/donut charts ( we needed to place legend outside chart in demo examples for these chart types ). Also I updated my answer. Hope this will help you!
  • You must to post comments
Showing 1 result
Your Answer

Please first to submit.