问题
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