Я использую библиотеку MPAndroidChart. У кого-нибудь есть эта проблема? Когда я кладу этикетки ВНИЗ, они обрезаются.
Спасибо
Я использую библиотеку MPAndroidChart. У кого-нибудь есть эта проблема? Когда я кладу этикетки ВНИЗ, они обрезаются.
Спасибо
Они обрезаются, потому что ваш текст слишком длинный и библиотека не поддерживает «перенос» ярлыков на новую строку.
Вам придется либо сократить метки легенды, либо реализовать желаемую функциональность самостоятельно.
ОБНОВЛЕНИЕ:
Теперь поддерживается перенос слов для Legend
.
chart.getLegend().setWordWrapEnabled(true);
Похоже, это новая функция с июня (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;
}
chartView.legend.wordWrapEnabled = true;
- person Hiren; 15.09.2015
Вы должны реализовать настройку легенд с их цветами и метками легенд, выполнив шаги Шаг 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));
Надеюсь, что это поможет вам
Здесь я покажу вам простой способ "Традиционным способом Android", он довольно простой, мой код приведен ниже:
<LinearLayout
android:id="@+id/i_am_chart_view_container"
...
android:paddingRight="20dp"
android:clipChildren="false"
android:clipToPadding="false"
.../>
Просто нужно добавить немного padding
в макет контейнера или несколько margin
в представление диаграммы и, наконец, установить для _4 _ & _ 5_ значение false.
Результат ниже:
синяя область - это область отступов или полей.
Установка содержимого обтекания поддерживает только позицию легенды, когда положение легенды находится в нижнем чарте влево, нижнем чарте правым, нижнем чартцентре.
Legend legend = pieChart.getLegend();
legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT);
legend.setWordWrapEnabled(true);
После этого набора данных
pieChart.setData(pieData)
это будет работать нормально
Чтобы избежать обрезки значений легенды, используйте следующий блок кода
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;
}
Попробуй это:
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);
После долгих исследований я нашел решение. Приведенный ниже код решил это.
chart.getLegend (). setWordWrapEnabled (истина);