以编程方式构建LinearLayout

时间:2013-01-04 11:04:29

标签: android graph android-linearlayout

我试图让我的布局看起来像这样:

enter image description here

我的包含此代码的类扩展了Linelayout本身,并使用addView

添加了不同的元素
    setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

        LinearLayout line = new LinearLayout(context);
    line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    viewVerLabels = new VerLabelsView(context);

            // add y axis linearlayout & graphview
    line.addView(viewVerLabels);
    line.addView(new GraphViewContentView(context), new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1));
    line.setOrientation(LinearLayout.HORIZONTAL);

            // add to main linearlayout
    addView(line);

    LinearLayout line2 = new LinearLayout(context);
    line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    viewHorLabels = new HorLabelsView(context);
    setOrientation(LinearLayout.VERTICAL);
            // add x axis labels
    line2.addView(viewHorLabels);
            // add to main linearlayout
    addView(line2);

我的XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/graph2"
    android:layout_width="fill_parent"
    android:layout_height="250dp"
    android:orientation="vertical" />

使用此代码,我会显示Y轴标签和图形,但缺少X轴标签

我似乎无法得到我想要的东西,我尝试了几种组合,我做错了什么

5 个答案:

答案 0 :(得分:2)

这似乎是一个尺寸问题,当将第一个布局添加到父级时,它们会填满整个区域,而其他区域现在只显示。

正如其他提及,建议(我会尝试独立) - 滚动视图在所有内容的顶部。 - 创建一个单独的Control,它从LinearLayout扩展,其各自的layout.xml只是在里面膨胀。而在此Activity上显示只是实例化此控件并添加一个包含所有控件的布局。 - 在所有内容之上创建一个新的LinearLayout,将其全部添加到其中,然后将其添加到实际的视图中。

如果有任何工作,或者你有解决方案,那么其他人就可以看到并受益。

答案 1 :(得分:1)

您只需尝试此代码我已将某些值,视图和setBackground更改为颜色,它会根据您的需要提供相同的输出。

LinearLayout MLayoutTm =(LinearLayout)findViewById(R.id.graph2);

    LinearLayout line = new LinearLayout(this);
    line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 0, 1));
    line.setBackgroundColor(Color.BLUE);
    TextView viewVerLabels = new TextView(this);

    viewVerLabels.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
    viewVerLabels.setText("Nimsih");
    viewVerLabels.setBackgroundColor(Color.RED);
    line.addView(viewVerLabels);

    TextView GraphViewContentView = new TextView(this);
    GraphViewContentView.setBackgroundColor(Color.MAGENTA);
    GraphViewContentView.setText("Nimsih2");
    GraphViewContentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.MATCH_PARENT, 1));
    line.addView(GraphViewContentView);

    line.setOrientation(LinearLayout.HORIZONTAL);

    MLayoutTm.addView(line);

    LinearLayout line2 = new LinearLayout(this);
    line2.setBackgroundColor(Color.RED);
    line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

    TextView viewHorLabels = new TextView(this);
    viewHorLabels.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT,
            1));
    viewHorLabels.setBackgroundColor(Color.CYAN);
    viewHorLabels.setText("Nimsih3 ");

    MLayoutTm.setOrientation(LinearLayout.VERTICAL);
    line2.addView(viewHorLabels);

    MLayoutTm.addView(line2);

答案 2 :(得分:1)

我通过使用arnodenhond代码实现x轴标签和y轴标签。你可以得到 http://android.arnodenhond.com/components

我的模拟器屏幕截图enter image description here

答案 3 :(得分:1)

尝试为您创建的布局设置不同的背景颜色,以查看其真实区域。很可能一些布局占用了所有可用高度,因此X轴标签超出边界。 您可能希望为布局指定某种权重,例如总权重总和为5,为绘图区域指定4,将1设置为包含X轴标签的布局

答案 4 :(得分:1)

这是我的代码,让我能够解决问题

        graphViewStyle = new GraphViewStyle();
        paint = new Paint();
        graphSeries = new ArrayList<GraphViewSeries>();

        setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        setOrientation(LinearLayout.VERTICAL);

        LinearLayout line = new LinearLayout(context);
        line.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        line.setOrientation(LinearLayout.HORIZONTAL);

        LinearLayout line2 = new LinearLayout(context);
        line2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        line2.setOrientation(LinearLayout.HORIZONTAL);

        txt = new TextView(mContext);
        addView(txt);

        GraphViewContentView graphContentView = new GraphViewContentView(context);
        graphContentView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 260, 1));
        line.addView(graphContentView);
        viewVerLabels = new VerLabelsView(context);
        viewVerLabels.setLayoutParams(new LayoutParams(30, 260));
        viewHorLabels = new HorLabelsView(context);
        viewHorLabels.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 15));

        line.addView(viewVerLabels);

        addView(line);

        line2.addView(viewHorLabels);
        TextView v = new TextView(context);
        v.setLayoutParams(new LayoutParams(30, 15));
        line2.addView(v);

        addView(line2);