MPAndroidChart - Обрезаются надписи легенды

Я использую библиотеку MPAndroidChart. У кого-нибудь есть эта проблема? Когда я кладу этикетки ВНИЗ, они обрезаются.

Спасибо

введите описание изображения здесь


person rafaelasguerra    schedule 08.01.2015    source источник


Ответы (8)


Они обрезаются, потому что ваш текст слишком длинный и библиотека не поддерживает «перенос» ярлыков на новую строку.

Вам придется либо сократить метки легенды, либо реализовать желаемую функциональность самостоятельно.

ОБНОВЛЕНИЕ:

Теперь поддерживается перенос слов для Legend.

chart.getLegend().setWordWrapEnabled(true);
person Philipp Jahoda    schedule 08.01.2015
comment
Спасибо за ответ. - person rafaelasguerra; 09.01.2015

Похоже, это новая функция с июня (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;
}
person Aksel Willgert    schedule 27.08.2015
comment
Большое спасибо ... Я решил для iOS chartView.legend.wordWrapEnabled = true; - person Hiren; 15.09.2015
comment
большой ! ты сэкономил мне время - person milan manvar; 23.05.2016

Вы должны реализовать настройку легенд с их цветами и метками легенд, выполнив шаги Шаг 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));

Надеюсь, что это поможет вам

person Amandeep Rohila    schedule 19.03.2015

Здесь я покажу вам простой способ "Традиционным способом Android", он довольно простой, мой код приведен ниже:

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

Просто нужно добавить немного padding в макет контейнера или несколько margin в представление диаграммы и, наконец, установить для _4 _ & _ 5_ значение false.

Результат ниже:

синяя область - это область отступов или полей.

введите описание изображения здесь

person codezjx    schedule 09.07.2015

Установка содержимого обтекания поддерживает только позицию легенды, когда положение легенды находится в нижнем чарте влево, нижнем чарте правым, нижнем чартцентре.

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

После этого набора данных

 pieChart.setData(pieData)

это будет работать нормально

person Vinod Ranga    schedule 26.05.2016

Чтобы избежать обрезки значений легенды, используйте следующий блок кода

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

Документ (для ярлыков оси 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;
    }
person Balalakshmi Sadhasivam    schedule 15.03.2016
comment
Спасибо, это работает, но первое и последнее значение точки данных тоже обрезаются, какое-нибудь решение? - person erical; 23.07.2016
comment
@erical Не могли бы вы предоставить скриншот для решения вашей проблемы? - person Balalakshmi Sadhasivam; 25.07.2016

Попробуй это:

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);
person Vandana patel    schedule 18.10.2019

После долгих исследований я нашел решение. Приведенный ниже код решил это.

chart.getLegend (). setWordWrapEnabled (истина);

person SFDCCoder    schedule 03.01.2017