我想在我的主要活动屏幕上将条形图(从https://github.com/PhilJay/MPAndroidChart)嵌入到视图中。它可以使用setContentView(barchart);
自行打开,但当我尝试将它放入RelativeLayout(使用rl.addView(barchart);
)时,会显示超级压缩到一个角落(参见上一张图片)。
MainActivity.java
ArrayList<BarEntry> entries = new ArrayList<>();
entries.add(new BarEntry(4f, 0));
entries.add(new BarEntry(8f, 1));
entries.add(new BarEntry(6f, 2));
BarDataSet dataset = new BarDataSet(entries, "# of Calls");
ArrayList<String> labels = new ArrayList<String>();
labels.add("First");
labels.add("Second");
labels.add("Third");
BarChart barchart = new BarChart(this); //'this' for context seems to work
//setContentView(barchart);
BarData data = new BarData(labels, dataset);
barchart.setData(data);
barchart.setNoDataTextDescription("Some bars should be here");
barchart.setDrawGridBackground(false);
barchart.setDrawBorders(false);
barchart.animateY(2000);
//The RelativeLayout Approach
RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout);
rl.addView(barchart); // add the programmatically created chart
rl.setBackgroundColor(Color.parseColor("#55656C"));
setContentView(R.layout.activity_main2);
barchart.invalidate(); //Refresh chart, just in case
activity_main2.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/relativeLayout"
android:layout_above="@+id/linearLayoutLabels"
android:layout_alignParentTop="true">
<com.github.mikephil.charting.charts.BarChart
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/chart"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_gravity="center"
android:layout_alignParentBottom="true" />
</RelativeLayout>
单独运作!
使用RelativeLayout方法:
更新
答案 0 :(得分:1)
当您从xml添加条形图时,宽度/高度设置为匹配父级,并且setContentView可能正在使用它们或强制match_parent无论如何,因为它是关于设置活动内容。
使用addView从代码中添加它时,您不需要指定任何布局参数,默认值为wrap_content。尝试使用以下行更改代码,看看它是否有任何区别:
rl.addView(
barchart,
new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));