Configure MPAndroidChart

I am using the MPAndroidChart library . I want to set up legends in MPAndroidChart. In the MPAndroidChart library, I tried to set the position of the legends. by the given code legend.setPosition (LegendPosition.BELOW_CHART_CENTER) , but cannot do this. I need to set the legends as shown in the following figure

help will be appreciated enter image description here

+7
android pie-chart mpandroidchart
source share
4 answers

Look at this answer MPAndroidChart - legend labels are truncated . I have already provided an answer according to your problem. Look for this code that will definitely help you. You will need to implement individual legends with colors and legend labels by following these steps:

Step 1

Legend legend = mChart.getLegend(); 

Step 2

 int colorcodes[] = legend.Colors(); 

Steps 3

 for (int i = 0; i < legend.Colors().length-1; i++) { ..... ..... } 

Steps 4

Then you will need to make one layout horizontally or vertically and get the legendary color codes and legends, and in accordance with the length of the legends - create a layout and label. An example code is given below:

  LinearLayout.LayoutParams parms_left_layout = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); parms_left_layout.weight = 1F; LinearLayout left_layout = new LinearLayout(context); left_layout.setOrientation(LinearLayout.HORIZONTAL); left_layout.setGravity(Gravity.CENTER); left_layout.setLayoutParams(parms_left_layout); LinearLayout.LayoutParams parms_legen_layout = new LinearLayout.LayoutParams( 20, 20); parms_legen_layout.setMargins(0, 0, 20, 0); LinearLayout legend_layout = new LinearLayout(context); legend_layout.setLayoutParams(parms_legen_layout); legend_layout.setOrientation(LinearLayout.HORIZONTAL); legend_layout.setBackgroundColor(colorcodes[i]); left_layout.addView(legend_layout); TextView txt_unit = new TextView(context); txt_unit.setText(legend.getLabel(i)); left_layout.addView(txt_unit); LinearLayout.LayoutParams parms_middle_layout = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); parms_middle_layout.weight = 1F; LinearLayout middle_layout = new LinearLayout(this); middle_layout.setOrientation(LinearLayout.HORIZONTAL); middle_layout.setGravity(Gravity.CENTER); middle_layout.setLayoutParams(parms_middle_layout); TextView txt_leads = new TextView(this); txt_leads.setText("450"); middle_layout.addView(txt_leads); LinearLayout.LayoutParams parms_right_layout = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); parms_right_layout.weight = 1F; LinearLayout right_layout = new LinearLayout(this); right_layout.setOrientation(LinearLayout.HORIZONTAL); right_layout.setGravity(Gravity.CENTER); right_layout.setLayoutParams(parms_right_layout); TextView txt_leads_percentage = new TextView(this); txt_leads_percentage.setText(munit_percentage_list.get(i) + ""); right_layout.addView(txt_leads_percentage); childlayout.addView(left_layout); childlayout.addView(middle_layout); childlayout.addView(right_layout); 

And after that, add your (child layout that you created at runtime) to the main layout.

+9
source share

In your case, I would recommend disabling Legend , which is drawn in a diagram, and instead come up with your own implementation.

 chart.getLegend().setEnabled(false) 

In the above example, you probably need a ListView that takes data from Legend chart objects and displays it.

When you look at the legend class , you will notice that it has member variables for colors and labels.

You can get these arrays ( getColors() , getLegendLabels() ) and use them to display in a ListView .

+7
source share

Below is the code for custom legend . Create table_row_legend.xml in resource layout

  <TableRow xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:weightSum="3"> <LinearLayout android:id="@+id/tv_color_container" android:layout_width="0dp" android:layout_height="match_parent" android:layout_gravity="center" android:layout_weight="0.30" android:orientation="horizontal" android:gravity="right" android:padding="5dp"> <LinearLayout android:id="@+id/tv_color" android:layout_width="20dp" android:layout_height="20dp" android:layout_gravity="center" android:orientation="horizontal" /> </LinearLayout> <TextView android:id="@+id/tv_label" android:layout_width="0dp" android:layout_gravity="top" android:layout_weight="1.35" android:gravity="left|top" android:padding="3dp" android:singleLine="true" android:textColor="#2b2b2b" android:textSize="16sp" /> <TextView android:id="@+id/tv_amt" android:layout_width="0dp" android:layout_weight="1.35" android:gravity="left|top" android:padding="3dp" android:textColor="#2b2b2b" android:textSize="16sp" /> </TableRow> 

Create a new LinearLayout under the LinearLayout diagram and wrap the parent layout with a static height scroll layout in a pie chart

  <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="#ffffff" android:layout_height="match_parent"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:paddingBottom="10dp" android:layout_marginBottom="10dp" android:layout_centerInParent="true" > <com.github.mikephil.charting.charts.PieChart android:id="@+id/chart1" android:layout_width="match_parent" android:layout_height="400dp" android:layout_below="@+id/tv_info" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:background="#ffffff" android:clickable="true" /> <TableLayout android:id="@+id/child_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/chart1" android:orientation="vertical" /> </RelativeLayout> </ScrollView> 

Modify your activity class as follows

 public void setCustomLegend(){ int colorcodes[] = l.getColors(); Context context = DistributorGraphActivity.this; for (int i = 0; i < l.getColors().length - 1; i++) { LayoutInflater inflater = getLayoutInflater(); TableRow tr = (TableRow) inflater.inflate(R.layout.table_row_legend, childlayout, false); childlayout.addView(tr); LinearLayout linearLayoutColorContainer=(LinearLayout) tr.getChildAt(0); LinearLayout linearLayoutColor= (LinearLayout) linearLayoutColorContainer.getChildAt(0); TextView tvLabel = (TextView) tr.getChildAt(1); TextView tvAmt = (TextView) tr.getChildAt(2); linearLayoutColor.setBackgroundColor(colorcodes[i]); tvLabel.setText(l.getLabel(i)); tvAmt.setText(arrListDealerGraph.get(i).getAmt()); } mChart.getLegend().setWordWrapEnabled(true); mChart.getLegend().setEnabled(false); } 
0
source share

For Kotlin, the command looks like this:

 mChart.legend.isEnabled = false 
-2
source share

All Articles