Personalización de leyenda MPAndroidChart

Estoy usando la biblioteca de MPAndroidChart . Quiero personalizar leyendas en MPAndroidChart. En la biblioteca de MPAndroidChart intenté establecer la posición de las leyendas. Por el código dado legend.setPosition (LegendPosition.BELOW_CHART_CENTER) pero no puede hacerlo. Tengo que establecer leyendas como se muestra en la siguiente imagen

La ayuda será apreciada Introduzca aquí la descripción de la imagen

Por favor, busque la respuesta dada MPAndroidChart – Las etiquetas de leyenda están siendo cortadas . Ya he proporcionado la respuesta según su problema. Busque el código dado que definitivamente le ayudará. Tendrá que implementar leyendas personalizadas con sus leyendas de colores y etiquetas siguiendo los pasos a continuación:

Paso 1

Legend legend = mChart.getLegend(); 

Paso 2

 int colorcodes[] = legend.Colors(); 

Pasos 3

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

Pasos 4

A continuación, tendrá que tomar una disposición horizontal o vertical y obtener leyendas de códigos de colores y leyendas etiqueta y de acuerdo a las leyendas de longitud crear diseño y la etiqueta. La muestra de código se da a continuación:

  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); 

Y después de esto añada su (diseño de niño que ha creado en tiempo de ejecución) a la disposición principal.

En su caso yo recomendaría que usted inhabilite la Legend que es dibujada por la carta y en lugar de otro vienen para arriba con su propia puesta en práctica.

 chart.getLegend().setEnabled(false) 

En el caso mostrado arriba probablemente necesitará un ListView que tome los datos del objeto Legend gráficos y lo muestre.

Cuando eche un vistazo a la clase Legend notará que tiene variables de miembro para colores y etiquetas.

Puede recuperar esos arrays ( getColors() , getLegendLabels() ) y usarlos para mostrarlos en ListView .

  Follow below code for custom legend. create table_row_legend.xml in layout resource <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 new Linear layout below your Pie chart and wrap parent layout with scroll layout with static height to 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> **Make changes in 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); } 
  • Cómo ocultar valores dibujados en MPAndroidChart?
  • Cómo ocultar los valores del eje x en Barchart de mpandroidChart
  • El fondo de gráfico de sectores cambia cuando el segmento es demasiado pequeño en MPAndroidChart
  • En MPAndroidChart, ¿cómo agregar el evento de clic para cada barra en Barchart?
  • Establecer MP androide Y-Axis punto de inicio android
  • Cómo configurar los colores en MPAndroidChart?
  • Utilizar MPChartLibrary dentro de un fragmento
  • MPAndroidChart - ¿Cómo mostrar los valores y cuando su valor es cero?
  • MPAndroidChart - Las primeras y últimas barras no se representan correctamente
  • Cómo añadir títulos de Axis a mpandroidchart
  • Forzar BarChart eje Y etiquetas a ser enteros?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.