Jasko
Jasko

Reputation: 119

Android layouts not displaying as intended

I need to create one full screen android activity programatically as shown in the image below:how screen should look like

The two buttons should remain at the bottom of the screen. Dummy content will consist of different components (textviews, radio buttons, checkboxes...) and will be populated dynamically.

This is the code I have so far:

        //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);

Here is what the code produces: enter image description here

Tthere are several points that do not work as intended: 1. Buttons are at the top and not the bottom. 2. Buttons do not spread out nicely 3. TextView I added as a test is shown behind the buttons. I will have many different widgets on the screen and expect them to be larger than one screen. I would like to have a scroll option but with all those widgets not to be seen behind the two buttons that are supposed to be at the bottom of the screen.

Upvotes: 1

Views: 143

Answers (2)

S.A.Norton Stanley
S.A.Norton Stanley

Reputation: 1873

The following xml is exactly what you would need:

  <?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>

Now programatically inflate dynamiclayout and add all your dynamic views into it.

Upvotes: 2

Bryan Herbst
Bryan Herbst

Reputation: 67189

Your root view is a FrameLayout, which is intended for only one child View. It is also frequently used to create overlapping Views, as all of a FrameLayout's children will be drawn in the same place on screen.

Replace your FrameLayout with a RelativeLayout. Make sure you update your LayoutParams references to use RelativeLayout.LayoutParams. You will also need to set the navigation LinearLayout to align with the parent View's bottom like so:

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

Though I really would suggest using XML. It will make your life far simpler.

Upvotes: 2

Related Questions