MPAndroidChart - Legend labels are being cut off

后端 未结 9 1347
自闭症患者
自闭症患者 2020-12-15 17:18

I am using MPAndroidChart library. Anybody has this problem? When I put the labels in BOTTOM position, these are cut.

Thank you

相关标签:
9条回答
  • 2020-12-15 17:49

    This seems to be a new feature since June (2015):

    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;
    }
    
    0 讨论(0)
  • 2020-12-15 17:49

    Try this:

    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);
    
    0 讨论(0)
  • 2020-12-15 17:59

    You have to implement customize legends with their legends colours and lables by following 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 have to take one layout horizontal or vertical. You have to get legends color codes and legends lable 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));
    

    Hope this will help you

    0 讨论(0)
  • 2020-12-15 18:01

    Set wrap content support only Legends postion when legend position is BelowChartLeft, BelowChartRight, BelowChartCenter

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

    After this set dataset

     pieChart.setData(pieData)
    

    it will work fine

    0 讨论(0)
  • 2020-12-15 18:02
     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);
    
    0 讨论(0)
  • 2020-12-15 18:05

    To avoid clipping of legend values use the following block of code

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

    Doc (for legend):

    /**
         * 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;
        }
    

    To avoid clipping of x-axis labels use

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

    Doc (for x-axis labels):

    /**
         * 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;
        }
    
    0 讨论(0)
提交回复
热议问题