MPAndroidChart - 传奇标签正在被切断

时间:2015-01-08 18:59:32

标签: android labels mpandroidchart

我正在使用MPAndroidChart library。有人有这个问题吗? 当我将标签置于BOTTOM位置时,这些都会被切断。

谢谢

enter image description here

9 个答案:

答案 0 :(得分:40)

自6月(2015年)以来,这似乎是一个新的feature

chart.getLegend().setWordWrapEnabled(true);

的Javadoc:

/**
 * Should the legend word wrap? / this is currently supported only for:
 * BelowChartLeft, BelowChartRight, BelowChartCenter. / note that word
 * wrapping a legend takes a toll on performance. / you may want to set
 * maxSizePercent when word wrapping, to set the point where the text wraps.
 * / default: false
 * 
 * @param enabled
 */
public void setWordWrapEnabled(boolean enabled) {
    mWordWrapEnabled = enabled;
}

答案 1 :(得分:10)

它们被删除是因为文字太长而且图书馆不支持将标签“包装”到新线。

您必须自己缩短图例标签或实现所需的功能。

<强>更新

现在支持Legend的自动换行。

chart.getLegend().setWordWrapEnabled(true);

答案 2 :(得分:7)

你必须用它们的图例颜色和标签来实现自定义图例 通过以下步骤 第1步

Legend legend = mChart.getLegend();

第2步

int colorcodes[] = legend.Colors();

第3步

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

第4步

然后你必须采取水平或垂直的一个布局。你必须得到传说颜色代码和传说标签,并根据图例长度创建布局和标签。  代码示例如下:

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

希望这会对你有所帮助

答案 3 :(得分:4)

在这里,我将通过“传统Android方式”向您展示一个简单的方法,它非常简单,我的代码如下:

<LinearLayout
    android:id="@+id/i_am_chart_view_container"
    ...
    android:paddingRight="20dp"
    android:clipChildren="false"
    android:clipToPadding="false"
    .../>

只需要向容器布局添加一些padding,或者向图表视图添加一些margin,最后将clipChildren&amp; clipToPadding设置为false。

结果如下:

蓝色区域是填充或边缘区域。

enter image description here

答案 4 :(得分:3)

 Legend l = pieChart.getLegend();
 l.setPosition(LegendPosition.BELOW_CHART_LEFT);
 l.setXEntrySpace(7f);
 l.setYEntrySpace(0f);
 l.setYOffset(0f);
 l.setDirection(LegendDirection.LEFT_TO_RIGHT);
 l.setWordWrapEnabled(true);

答案 5 :(得分:3)

设置换行内容仅支持图例位置时的图例位置 BelowChartLeft,BelowChartRight,BelowChartCenter

     Legend legend = pieChart.getLegend();
        legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
        legend.setWordWrapEnabled(true);

在此设置数据集之后

 pieChart.setData(pieData)

它会正常工作

答案 6 :(得分:1)

要避免裁剪图例值,请使用以下代码块

Legend legend=lineChart.getLegend();
legend.setWordWrapEnabled(true);

文档(适用于图例):

/**
     * Should the legend word wrap? / this is currently supported only for:
     * BelowChartLeft, BelowChartRight, BelowChartCenter. / note that word
     * wrapping a legend takes a toll on performance. / you may want to set
     * maxSizePercent when word wrapping, to set the point where the text wraps.
     * / default: false
     * 
     * @param enabled
     */
    public void setWordWrapEnabled(boolean enabled) {
        mWordWrapEnabled = enabled;
    }

要避免裁剪x轴标签,请使用

XAxis xAxis = lineChart.getXAxis();
xAxis.setAvoidFirstLastClipping(true);

Doc(适用于x轴标签):

/**
     * if set to true, the chart will avoid that the first and last label entry
     * in the chart "clip" off the edge of the chart or the screen
     * 
     * @param enabled
     */
    public void setAvoidFirstLastClipping(boolean enabled) {
        mAvoidFirstLastClipping = enabled;
    }

答案 7 :(得分:0)

经过长时间的研究,我找到了解决方案。以下代码解决了它。

chart.getLegend()setWordWrapEnabled(真);

答案 8 :(得分:0)

尝试一下:

Legend l = pieChart.getLegend();
l.setVerticalAlignment(Legend.LegendVerticalAlignment.BOTTOM);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
l.setXEntrySpace(4f);
l.setYEntrySpace(0f);
l.setWordWrapEnabled(true);