Inflate layout programmatically within another layout

纵饮孤独 提交于 2019-11-26 11:06:07

问题


I need help with my android app. I need inflate a layout within another layout and I dont know how I do. My xml code is this:

  • item.xml - I need inflate multiple xml (depending on a variable number)

        <RelativeLayout
             android:id=\"@+id/cartel_N1\"
             android:layout_width=\"150dp\"
             android:layout_height=\"match_parent\"
             android:background=\"@color/tabhost_background_pressed\"
             android:layout_marginRight=\"22dp\"
             android:orientation=\"vertical\" >
    
        <ImageView 
            android:id=\"@+id/img_N1\"
            android:layout_width=\"120dp\"
            android:layout_height=\"120dp\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginTop=\"15dp\"
            android:layout_marginRight=\"15dp\"
            android:src=\"@drawable/mcdonalds_icon\" />
    
        <TextView 
            android:id=\"@+id/title_N1\"
            android:layout_width=\"fill_parent\"
            android:layout_height=\"wrap_content\"
            android:gravity=\"center_horizontal\"
            android:text=\"McDonals del CC Alcampo\"
            android:layout_marginBottom=\"10dp\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginRight=\"15dp\"
            android:textSize=\"15sp\" />
    
        <TextView 
            android:id=\"@+id/categoria_N1\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:gravity=\"center_horizontal\"
            android:text=\"CATEGORIA\"
            android:textSize=\"16sp\"
            android:textStyle=\"bold\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginRight=\"15dp\" />
    
        <RelativeLayout 
            android:id=\"@+id/stars_and_distance_N1\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:orientation=\"horizontal\" >
    
            <ImageView
                android:id=\"@+id/stars_N1\"
                android:layout_width=\"wrap_content\"
                android:layout_height=\"wrap_content\"
                android:src=\"@drawable/stars_25\"
                android:layout_marginLeft=\"15dp\"
                android:layout_marginTop=\"7dp\" />
    
    
            <TextView
                android:id=\"@+id/distance_N1\"
                android:layout_width=\"wrap_content\"
                android:layout_height=\"wrap_content\"
                android:text=\"200m\"
                android:textSize=\"12sp\"
                android:layout_alignParentRight=\"true\"
                android:layout_marginRight=\"15dp\"
                android:gravity=\"center_vertical\"
                android:layout_marginTop=\"3dp\" />
    
    
            <ImageView
                android:id=\"@+id/icon_pos_N1\"
                android:layout_width=\"10dp\"
                android:layout_height=\"10dp\"
                android:src=\"@drawable/marker_distance\"
                android:layout_toLeftOf=\"@id/distance_N1\"
                android:layout_marginTop=\"7dp\" />
    
        </RelativeLayout><LinearLayout
        android:id=\"@+id/cartel_N1\"
        android:layout_width=\"150dp\"
        android:layout_height=\"match_parent\"
        android:background=\"@color/tabhost_background_pressed\"
        android:layout_marginRight=\"22dp\"
        android:orientation=\"vertical\" >
    
        <ImageView 
            android:id=\"@+id/img_N1\"
            android:layout_width=\"120dp\"
            android:layout_height=\"120dp\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginTop=\"15dp\"
            android:layout_marginRight=\"15dp\"
            android:src=\"@drawable/mcdonalds_icon\" />
    
        <TextView 
            android:id=\"@+id/title_N1\"
            android:layout_width=\"fill_parent\"
            android:layout_height=\"wrap_content\"
            android:gravity=\"center_horizontal\"
            android:text=\"McDonals del CC Alcampo\"
            android:layout_marginBottom=\"10dp\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginRight=\"15dp\"
            android:textSize=\"15sp\" />
    
        <TextView 
            android:id=\"@+id/categoria_N1\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:gravity=\"center_horizontal\"
            android:text=\"CATEGORIA\"
            android:textSize=\"16sp\"
            android:textStyle=\"bold\"
            android:layout_marginLeft=\"15dp\"
            android:layout_marginRight=\"15dp\" />
    
        <RelativeLayout 
            android:id=\"@+id/stars_and_distance_N1\"
            android:layout_width=\"match_parent\"
            android:layout_height=\"wrap_content\"
            android:orientation=\"horizontal\" >
    
            <ImageView
                android:id=\"@+id/stars_N1\"
                android:layout_width=\"wrap_content\"
                android:layout_height=\"wrap_content\"
                android:src=\"@drawable/stars_25\"
                android:layout_marginLeft=\"15dp\"
                android:layout_marginTop=\"7dp\" />
    
    
            <TextView
                android:id=\"@+id/distance_N1\"
                android:layout_width=\"wrap_content\"
                android:layout_height=\"wrap_content\"
                android:text=\"200m\"
                android:textSize=\"12sp\"
                android:layout_alignParentRight=\"true\"
                android:layout_marginRight=\"15dp\"
                android:gravity=\"center_vertical\"
                android:layout_marginTop=\"3dp\" />
    
    
            <ImageView
                android:id=\"@+id/icon_pos_N1\"
                android:layout_width=\"10dp\"
                android:layout_height=\"10dp\"
                android:src=\"@drawable/marker_distance\"
                android:layout_toLeftOf=\"@id/distance_N1\"
                android:layout_marginTop=\"7dp\" />
    
        </RelativeLayout>
    
  • This is my main xml:

    <ScrollView
          xmlns:android=\"http://schemas.android.com/apk/res/android\"
          android:layout_width=\"match_parent\"
          android:layout_height=\"wrap_content\">
    
      <LinearLayout
           android:id=\"@+id/container_destacado\"
           android:layout_width=\"match_parent\"
           android:layout_height=\"match_parent\"
           android:orientation=\"vertical\" >
    
               <!-- Inflate multiple xml file here -->
    
          </LinearLayout>
    </ScrollView>
    

回答1:


You could use something like

LayoutInflater inflater = LayoutInflater.from(context);

//to get the MainLayout
View view = inflater.inflate(container_destacado, null);
...
//Avoid pass null in the root it ignores spaces in the child layout

View inflatedLayout= inflater.inflate(R.layout.yourLayout, (ViewGroup) view, false);
containerDestacado.addView(inflatedLayout);



回答2:


You can implement this like below:

LayoutInflater linf;
LinearLayout rr;

linf = (LayoutInflater) getApplicationContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);
linf = LayoutInflater.from(activity.this);

rr = (LinearLayout) findViewById(R.id.container_destacado);

for (int i = 1; i < NoOfTimes; i++) {

    final View v = linf.inflate(R.layout.item, null);
    rr.addView(v);
}



回答3:


In some point you should gain access to your inflater inside your activity, you can call it with this code:

LayoutInflater li = LayoutInflater.from(context);

Where context is this or this.getActivity() if it is a Fragment. Then inflate your layour with:

View layout = li.inflate(R.layout.your_layout, null, false);

Then use addView(layout) to your container_destacado:

View containerDestacado = li.inflate(R.layout.container_destacado, null, false);
containerDestacado.addView(layout);

Hope it helps.




回答4:


ll = (LinearLayout) findViewById(R.id.container_destacado);  // ll is the layout where your inflated layout will be added 
linflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int pos = 0;
    while (pos < noOfTimes) 
    {
        View myView = linflater.inflate(R.layout.item, null); //here item is the the layout you want to inflate 
        myView.setId(pos);
        /*
           You can change TextView text and ImageView images here e.g.
           TextView tv = (TextView)myView.findViewById(R.id.title_N1);
           tv.setText(pos);

        */
        pos++;
        ll.addView(myView);
    }



回答5:


Kotlin code to do so:

 val layoutToInflate = 
 this.layoutInflater.inflate(R.layout.ly_custom_layout, 
  null)
container_destacado.addView(layoutToInflate )



回答6:


You have the LinearLayout on which you want to inflate other childs:

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

Once you loaded the item.xml with an inflater, you can just use

container.addView(itemView);


来源:https://stackoverflow.com/questions/21400415/inflate-layout-programmatically-within-another-layout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!