15

我正在使用MPAndroidChart 库。我想在 MPAndroidChart 中自定义图例。在 MPAndroidChart 库中,我尝试设置图例的位置。通过给定的代码legend.setPosition(LegendPosition.BELOW_CHART_CENTER)但无法做到这一点。我必须设置图例,如下图所示

帮助将不胜感激 在此处输入图像描述

4

5 回答 5

10

在您的情况下,我建议您禁用Legend图表绘制的内容,而是提出您自己的实现。

chart.getLegend().setEnabled(false)

在上面显示的情况下,您可能需要一个ListView从图表Legend对象中获取数据并显示它的函数。

当您查看Legend 类时,您会注意到它具有颜色和标签的成员变量。

您可以检索这些数组 ( getColors(), getLegendLabels()) 并使用它们显示在ListView.

于 2015-03-19T11:38:24.687 回答
9

Please look for the given answer MPAndroidChart - Legend labels are being cut off. I have already provided the answer according to your problem. Look for given code which will definitely help you. You will have to implement customized legends with their legends colours and labels by following the steps below:

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 have to take one layout horizontal or vertical and get legends color codes and legends label and according to legends length create layout and label. Code sample 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 this add your (child layout which you have created at runtime ) to the main layout.

于 2015-03-19T13:28:20.380 回答
6

用于设置自定义图例:

public void setLegends(){

Legend l = holder.pieChart.getLegend();

l.getEntries();

l.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER);

l.setYEntrySpace(10f);

l.setWordWrapEnabled(true);

LegendEntry l1=new LegendEntry("Male",Legend.LegendForm.CIRCLE,10f,2f,null,Color.YELLOW);
LegendEntry l2=new LegendEntry("Female", Legend.LegendForm.CIRCLE,10f,2f,null,Color.RED);

l.setCustom(new LegendEntry[]{l1,l2});

l.setEnabled(true);

}
于 2019-04-22T09:06:50.650 回答
1

按照下面的代码custom legendtable_row_legend.xml在布局资源中创建

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

在饼图下方创建新LinearLayout的,并使用具有静态高度的滚动布局将父布局包装到饼图

    <?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>

在您的活动课程中进行如下更改

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);
}
于 2016-04-06T11:34:52.353 回答
-2

对于 Kotlin,命令是:

mChart.legend.isEnabled = false
于 2018-08-09T05:50:38.883 回答