在RelativeLayout中放置自定义视图

时间:2015-08-14 02:54:35

标签: android android-layout charts

我想在我的主要活动屏幕上将条形图(从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>

输出

单独运作!

enter image description here

使用RelativeLayout方法:

enter image description here

更新

enter image description here

1 个答案:

答案 0 :(得分:1)

当您从xml添加条形图时,宽度/高度设置为匹配父级,并且setContentView可能正在使用它们或强制match_parent无论如何,因为它是关于设置活动内容。

使用addView从代码中添加它时,您不需要指定任何布局参数,默认值为wrap_content。尝试使用以下行更改代码,看看它是否有任何区别:

rl.addView(
        barchart,
        new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                        ViewGroup.LayoutParams.MATCH_PARENT));