MPAndroidChart BarChart单条X轴数据时标签重复显示如何解决
问题原因
MPAndroidChart 的 X 轴 setLabelCount 方法第二个参数传入 false 时,不会严格遵循你设置的标签数量,系统会自动调整标签分布。当仅存在 1 条数据时,X 轴默认会渲染首尾两个位置的标签,两个标签都会匹配到你仅有的 1 个日期文本,就出现了重复显示的问题。
修复方案
- 先修正代码中的拼写错误:循环条件中的
respones为笔误,需改为response - 对单数据场景做特殊适配:
- 单数据时给
setLabelCount第二个参数传true,强制严格显示 1 个标签 - 手动设置 X 轴的上下限,缩小X轴显示区间,仅保留单个标签的展示位置
- 多数据场景保持原有逻辑不变
修改后完整代码
private void showBarGraph(List<Object> response) { barChart.setNoDataText(getResources().getString(R.string.sorry_data_not_available)); barChart.clear(); if(response.size()>0) { int highestValue = response != null && response.size() > 0 ? response.size() : 0; barChart.getAxisLeft().setAxisMaximum(highestValue); barChart.getAxisLeft().setAxisMinimum(0); barChart.animateY(1000); List<BarEntry> entries = new ArrayList<>(); List<String> xAxisValues = new ArrayList<>(); if (response != null) { // 修正拼写错误:respones改为response for (int i = 0; i < response.size(); i++) { entries.add(new BarEntry(i, response.get(i).getCount(), ContextCompat.getColor(getActivity(), R.color.graph))); xAxisValues.add(response.get(i).getTimekey()); } barChart.getAxisLeft().setLabelCount(highestValue > 10 ? 10 : highestValue, false); // 修改X轴标签计数逻辑,单数据时强制严格匹配标签数量 int xLabelCount = response.size() <= 12 ? response.size() : 12; boolean forceXLabelCount = response.size() == 1; barChart.getXAxis().setLabelCount(xLabelCount, forceXLabelCount); // 单数据时手动设置X轴上下限 if (response.size() == 1) { barChart.getXAxis().setAxisMinimum(-0.5f); barChart.getXAxis().setAxisMaximum(0.5f); } if (response.size() >= 4) { barChart.getXAxis().setLabelRotationAngle(-45); } else { barChart.getXAxis().setLabelRotationAngle(0); } } IndexAxisValueFormatter xAxisValueFormatter = new IndexAxisValueFormatter(xAxisValues); barChart.getXAxis().setValueFormatter(xAxisValueFormatter); BarXYMarkerView xymv = new BarXYMarkerView(getActivity(), xAxisValueFormatter); // Set the marker to the chart xymv.setChartView(barChart); barChart.setMarker(xymv); BarDataSet set = new BarDataSet(entries, null); set.setDrawValues(false); List<Integer> graphColors = new ArrayList<>(); graphColors.add(ContextCompat.getColor(getActivity(), R.color.graph)); set.setColors(graphColors); BarData data = new BarData(set); barChart.setData(data); barChart.invalidate(); } }
修改后单数据场景只会显示1次日期标签,多数据场景原有逻辑不受影响。
内容的提问来源于stack exchange,提问作者Abd Maj
相关产品推荐
相关产品推荐

