Android布局未按预期显示

时间:2013-07-12 13:35:11

标签: android android-layout

我需要创建一个全屏Android活动以编程方式,如下图所示:how screen should look like

两个按钮应保留在屏幕底部。 虚拟内容将包含不同的组件(文本视图,单选按钮,复选框......),并将动态填充。

这是我到目前为止的代码:

        //Main Layout
    FrameLayout lLayout = new FrameLayout(this);
    lLayout.setBackgroundColor(Color.parseColor("#0099cc"));
    lLayout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
    //Navigation layout
    LinearLayout l = new LinearLayout(this, null, R.style.ButtonBar);
    LayoutParams bottomLayout = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
    l.setLayoutParams(bottomLayout);
    l.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
    l.setBackgroundColor(Color.parseColor("#66000000"));
    l.setOrientation(LinearLayout.HORIZONTAL);


    LayoutParams buttLayout = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    //previous section button
    previousButton = new Button(this);
    previousButton.setLayoutParams(buttLayout);
    previousButton.setText("Previous section");
    previousButton.setOnClickListener(this);
    l.addView(previousButton);
    //next section button
    Button nextButton = new Button(this);
    nextButton.setLayoutParams(buttLayout);
    nextButton.setText("Next section");
    nextButton.setOnClickListener(this);
    l.addView(nextButton);

    //add components
    TextView tView = new TextView(this);
    tView.setText("Dummy text");
    tView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
    lLayout.addView(tView);
    lLayout.addView(l);
    setContentView(lLayout);

以下是代码生成的内容: enter image description here

有几点不能按预期工作: 1.按钮位于顶部,而不是底部。 2.按钮不能很好地展开 3.我在按钮后面添加了作为测试添加的TextView。我将在屏幕上有许多不同的小部件,并期望它们大于一个屏幕。我想有一个滚动选项,但所有这些小部件都不能在应该位于屏幕底部的两个按钮后面看到。

2 个答案:

答案 0 :(得分:2)

以下xml正是您所需要的:

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/dynamiclayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/navigationlayout"
        android:orientation="vertical" >
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/navigationlayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="Previous Section" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Next Section" />
    </RelativeLayout>

</RelativeLayout>

现在以编程方式夸大动态布局,并将所有动态视图添加到其中。

答案 1 :(得分:2)

您的根视图是FrameLayout,仅适用于一个子视图。它也经常用于创建重叠的视图,因为所有FrameLayout的孩子都将被绘制在屏幕上的相同位置。

FrameLayout替换为RelativeLayout。请务必更新LayoutParams引用以使用RelativeLayout.LayoutParams。您还需要将导航LinearLayout设置为与父视图的底部对齐,如下所示:

RelativeLayout.LayoutParams lps = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lps.addRule(RelativeLayout.LayoutParams.ALIGN_PARENT_BOTTOM, true);

虽然我真的建议使用XML。它会让你的生活变得更加简单。