MPAndroidChart: HorizontalBarChart запускается за пределами экрана только при первом отображении
Я отображаю данные из вызова API, используя HorizontalBarChart
, При первом запуске вызова диаграмма исчезает с экрана при отображении:
Если я повторно отправлю вызов, график теперь будет иметь правильный размер:
Когда мое приложение получает успешный сетевой ответ, выполняется следующий код (вспомогательные методы не отображаются):
public void displayBarChart() {
barChart.setData(getBarData());
barChart.setTouchEnabled(false);
barChart.setFitBars(true);
barChart.getLegend().setEnabled(false);
barChart.getDescription().setEnabled(false);
configureXAxis();
configureYAxis();
barChart.invalidate(); // refresh
}
Код макета для barChart
является:
<com.github.mikephil.charting.charts.HorizontalBarChart
android:id="@+id/bar_chart"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginBottom="8dp" />
barChart
вложен в LinearLayout
это само по себе внутри ScrollView
, Все эти взгляды имеют layout_width="match_parent"
,
Есть идеи, что здесь происходит? Кажется, что для первого звонка как-то barChart
не имеет правильного понимания требуемой ширины, но последующие вызовы сбрасывают его. Спасибо!
Обновить:
После некоторых экспериментов я решил, что мне нужно выполнить setData()
после звонка configureXAxis()
, который определяется как
private void configureXAxis() {
final XAxis xAxis = barChart.getXAxis();
xAxis.setDrawAxisLine(false); // no axis line
xAxis.setDrawGridLines(false); // no grid lines
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setLabelCount(2);
xAxis.setTextSize(16f);
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(final float value, final AxisBase axis) {
return labels.get((int) value);
}
});
}
Кто-нибудь знает, почему это изменение порядка важно для правильного отображения гистограммы?