在另一个布局中以编程方式扩展布局

问题描述 投票:42回答:6

我需要帮助我的Android应用程序。我需要在另一个布局中膨胀布局,我不知道我是怎么做的。我的xml代码是这样的:

  • item.xml - 我需要膨胀多个xml(取决于变量号) <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>
  • 这是我的主要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>
android xml android-layout android-inflate
6个回答
111
投票

你可以用类似的东西

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

14
投票

你可以像下面这样实现:

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

5
投票

在某些时候,您应该可以访问活动中的inflater,您可以使用以下代码调用它:

LayoutInflater li = LayoutInflater.from(context);

上下文是this或this.getActivity(),如果它是Fragment。然后通过以下方式充气:

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

然后使用addView(布局)到container_destacado:

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

希望能帮助到你。


2
投票
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);
    }

1
投票

Kotlin代码这样做:

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

1
投票

你有想要给其他孩子充气的LinearLayout:

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

使用inflater加载item.xml后,您就可以使用了

container.addView(itemView);
© www.soinside.com 2019 - 2024. All rights reserved.