Creating LinearLayout Programmatically/Dynamically with Multiple Views

89,479

You want that hierarchy programmatically.

- LinearLayout(horizontal) - ImageView - LinearLayout(vertical) - TextView - TextView - TextView - TextView

Ok lets start with Parent LinearLayout

LinearLayout parent = new LinearLayout(context);

parent.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
parent.setOrientation(LinearLayout.HORIZONTAL);

//children of parent linearlayout

ImageView iv = new ImageView(context);

LinearLayout layout2 = new LinearLayout(context);

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

parent.addView(iv);
parent.addView(layout2);

//children of layout2 LinearLayout

TextView tv1 = new TextView(context);
TextView tv2 = new TextView(context);
TextView tv3 = new TextView(context);
TextView tv4 = new TextView(context);

layout2.addView(tv1);
layout2.addView(tv2);
layout2.addView(tv3);
layout2.addView(tv4);

And you are done :)

Share:
89,479
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I have a hierarchy that is like this:

    • LinearLayout(horizontal)
      • ImageView
      • LinearLayout(vertical)
        • TextView
        • TextView
        • TextView
        • TextView

    I want to be able to add the hierarchy above through iteration as long as there is data that could be obtained from the database(using Parse)

    I have tried putting up the ImageView and LinearLayout under the parent LinearLayout but it doesn't seem to work. Here is my code in MainActivity.Java:

    LinearLayout LL_Outer = (LinearLayout) findViewById(R.id.new_linearLayoutOuter);
    LL_Outer.setOrientation(LinearLayout.VERTICAL); // set orientation
    LL_Outer.setBackgroundColor(color.white); // set background
    // set Layout_Width and Layout_Height
    LinearLayout.LayoutParams layoutForOuter = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    LL_Outer.setLayoutParams(layoutForOuter);
    
    
    LinearLayout LL_Inner = (LinearLayout) findViewById(R.id.new_linearLayoutInner);
    LL_Inner.setOrientation(LinearLayout.HORIZONTAL);
    LL_Inner.setBackgroundColor(color.white);
    LinearLayout.LayoutParams layoutForInner = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    LL_Inner.setLayoutParams(layoutForInner);
    
    //LL_Outer.addView(LL_Inner);
    
    ImageView IV = (ImageView) findViewById(R.id.new_imageViewPP);
    //IV.getLayoutParams().height = 55;
    //IV.getLayoutParams().width = 55;
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    params.setMargins(14, 12, 0, 0);
    params.height = 55;
    params.weight = 55;
    IV.setBackgroundColor(color.black);
    IV.setLayoutParams(params);
    
    LL_Inner.addView(IV);
    LL_Outer.addView(LL_Inner);
    

    I don't know where I went wrong as my code did not prompt any error. Please help.

    EDIT: I have edited the Orientations accordingly and when I run the app, it stops working. And prompts an error in LogCat saying "The specified child already has a parent. You must call removeView() on the child's parent first.

    Here's my XML:

    <LinearLayout
        android:id="@+id/new_linearLayoutOuter"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:orientation="horizontal" >
    
        <ImageView
                android:id="@+id/new_imageViewPP"
                android:layout_width="55dp"
                android:layout_height="55dp"
                android:layout_marginLeft="14dp"
                android:layout_marginTop="12dp"
                android:background="@color/black"
                android:contentDescription="@string/pp" />
    
        <LinearLayout
            android:id="@+id/new_linearLayoutInner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:orientation="vertical" >
    
            <TextView 
                android:id="@+id/new_textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/movie_title"
                android:paddingTop="10dp"
                android:paddingLeft="7dp"
                android:textSize="15sp" /> <!-- Title of the movie -->
    
            <TextView 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/review_by"
                android:paddingTop="3dp"
                android:paddingLeft="7dp"
                android:textSize="12sp" /> <!-- By -->
    
            <TextView 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/movie_stars"
                android:paddingTop="3dp"
                android:paddingLeft="7dp"
                android:textSize="12sp" /> <!-- Rating and date -->
    
            <TextView 
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/sample_string"
                android:maxLines="5"
                android:scrollbars="vertical"
                android:paddingTop="10dp"
                android:paddingLeft="7dp"
                android:textSize="12sp"
                android:layout_gravity="center_vertical|right" /> <!-- Review content -->
    
    
        </LinearLayout>
    
    </LinearLayout>
    
  • Shajeel Afzal
    Shajeel Afzal over 6 years
    Your code throughs this exception: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
  • Sagar Balyan
    Sagar Balyan over 6 years
    How to create LayoutParams with values like width:0dp and height:100dp unlike match_parent and wrap_content
  • klys
    klys about 6 years
    I got same error about removeView() stackoverflow.com/questions/50065768/…