我正在使用HorizontalBarChart
显示来自API调用的数据。首次运行该呼叫时,图表在显示时在屏幕外运行:
如果我重新提交呼叫,则图表的大小现在正确:
当我的应用程序收到成功的网络响应时,将执行以下代码(不显示辅助方法):
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);
}
});
}
有人知道为什么重新排序对于条形图正确显示很重要吗?