Mint Mint - 2 months ago 14
Android Question

Android : Merging xml and programmatically generate layout

I have requirement where I need to combine a programmatically generate layout and a xml. What approach should I take? Please let me know. Thank you.

Generate layout :

@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);

LinearLayout audio = new LinearLayout(this);

audio.setGravity(Gravity.BOTTOM | Gravity.CENTER);

RecordButton = new RecordButton(this);
audio.addView(RecordButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.CENTER | Gravity.BOTTOM));

PlayButton = new PlayButton(this);
audio.addView(PlayButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
Gravity.CENTER | Gravity.BOTTOM));

setContentView(audio);
}


xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:gravity="top">

<Button
android:id="@+id/next"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="130dp"
android:background="#54C571"
android:text="Next"
android:textColor="#FFFFFF"
android:textSize="23sp"
android:textStyle="bold" />

Answer

Create a container view to hold your view and add the generated view to that,

This is the xml,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:gravity="top">

    <Button
        android:id="@+id/next"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="130dp"
        android:background="#54C571"
        android:text="Next"
        android:textColor="#FFFFFF"
        android:textSize="23sp"
        android:textStyle="bold" />

    <!-- create a container view to hold your view -->
    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/next" />

</RelativeLayout>

In your code,

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.the_above_layout);

    LinearLayout container = (LinearLayout) findViewById(R.id.container);


    LinearLayout audio = new LinearLayout(this);

    audio.setGravity(Gravity.BOTTOM | Gravity.CENTER);

    RecordButton = new RecordButton(this);
    audio.addView(RecordButton,
                new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER | Gravity.BOTTOM));

    PlayButton = new PlayButton(this);
    audio.addView(PlayButton,
                new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    Gravity.CENTER | Gravity.BOTTOM));


    // add the view to your container
    container.addView(audio);
}