如何为MPAndroidChart BarChart设置高度和宽度?

3
我可以帮您翻译成中文。这是需要翻译的内容:

我正在尝试向 activity 添加一个静态的柱状图,但它覆盖了整个屏幕。我使用的代码如下 -

MainActivity.java

 BarChart bc = (BarChart) findViewById(R.id.chart);


    ArrayList<BarEntry> entries = new ArrayList<>();
    entries.add(new BarEntry(4f, 0));
    entries.add(new BarEntry(8f, 1));
    entries.add(new BarEntry(6f, 2));
    entries.add(new BarEntry(12f, 3));
    entries.add(new BarEntry(18f, 4));
    entries.add(new BarEntry(9f, 5));
    entries.add(new BarEntry(12f, 6));
    entries.add(new BarEntry(10f, 7));

    BarDataSet dataset = new BarDataSet(entries, "# of Calls");

    ArrayList<String> labels = new ArrayList<String>();
    labels.add("January");
    labels.add("February");
    labels.add("March");
    labels.add("April");
    labels.add("May");
    labels.add("June");
    labels.add("July");
    labels.add("August");
bc=new BarChart(this);

    BarData data = new BarData(labels, dataset);


    setContentView(bc);

   bc.setData(data);

MainActivity.xml

<com.github.mikephil.charting.charts.BarChart
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:id="@+id/chart"
    android:layout_below="@+id/textView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="62dp">

    </com.github.mikephil.charting.charts.BarChart>

我错在哪里了? 有什么建议吗?

1个回答

2
当您调用setContentView()时,指定视图的布局参数被忽略,并设置为默认值MATCH_PARENT,因此在您的代码中,setContentView(bc)会导致BarChart填满整个屏幕。
一种解决方案是将静态BarChart视图放置在ViewGroup(例如LinearLayout)下,在activity_main.xml中调用setContentView(R.layout.activity_main)
编辑:
此外,在您的代码中,通过以下方式获取在xml中定义的BarChart:
BarChart bc = (BarChart) findViewById(R.id.chart);

你的这句话是正确的...但是在你的代码后面,你通过给另一个实例化的BarChart赋值bc,使上述行变得无意义:

bc=new BarChart(this);

因此,请删除此行,您应该能够看到您的条形图。


我已经使用了 setContentView(R.layout.activity_main);,并且在xml中进行了更改,将图表添加到了 LinearLayout 中。另一个 setContentView(bc); 是用于设置图表内容的,你的方法不起作用,图表没有显示出来。 - dhar619
当我移除 bc=new BarChart(this); 后出现了以下错误:java.lang.IllegalStateException: 指定的子项已经有父项。您必须首先在子项的父项上调用 removeView()。之后我引入了新的 BarChart BarChart abc; Bc.addView(abc = new BarChart(MainActivity.this)); abc.setData(data);对我来说运作良好。 - dhar619
听起来好像你仍然在做setContentView(bc)。最终你解决了问题,我很高兴 :) - j449li
不,我没有使用 setContentView(bc),而是使用了 addView()。是的,它可以工作,但我不知道这是否是正确的程序。 - dhar619

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接