LayoutInflater的基本用法,首先需要获取到LayoutInflater的实例,有两种方法可以获取到
第一种写法如下:
LayoutInflater layoutInflater = LayoutInflater.from(context);
第二种写法,也可以完成同样的效果:
LayoutInflater layoutInflater = (LayoutInflater)context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
其实第一种就是第二种的简单写法,只是Android给我们做了一下封装而已。
得到了LayoutInflater的实例之后就可以调用它的inflate()方法来加载布局了,如下所示:
layoutInflater.inflate(resourceId, root);
这样就成功成功创建了一个布局的实例,之后再将它添加到指定的位置就可以显示出来了。
下面通过一个非常简单的小例子,来更加直观地看一下LayoutInflater的用法;
MainActivity对应的布局文件叫做activity_main.xml,代码如下所示:
这个布局文件的内容非常简单,只有一个空的LinearLayout,里面什么控件都没有,因此界面上应该不会显示任何东西。
再定义一个布局文件,给它取名为button_layout.xml,代码如下所示:
这个布局文件只有一个Button按钮。
现在我们要想办法,如何通过LayoutInflater来将button_layout这个布局添加到主布局文件的LinearLayout中。根据刚刚介绍的用法,修改MainActivity中的代码,如下所示:
public class MainActivity extends Activity {
private LinearLayout mainLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout = (LinearLayout) findViewById(R.id.main_layout);
LayoutInflater layoutInflater = LayoutInflater.from(this);
View buttonLayout = layoutInflater.inflate(R.layout.button_layout, null);
mainLayout.addView(buttonLayout);
}
}
可以看到,这里先是获取到了LayoutInflater的实例,然后调用它的inflate()方法来加载button_layout这个布局,最后调用LinearLayout的addView()方法将它添加到LinearLayout中。
Button在界面上显示了!说明我们确实是借助LayoutInflater成功将button_layout这个布局添加到LinearLayout中了。
LayoutInflater技术广泛应用于需要动态添加View的时候,比如在ScrollView和ListView中,经常都可以看到LayoutInflater的身影。
inflate()方法还有个接收三个参数的方法重载,结构如下:
inflate(int resource, ViewGroup root, boolean attachToRoot)
所以根据以上结论来看,如果我们item的布局是酱紫的:
如果你想让 android:layout_width 这些布局属性起作用的话,你应该这样写代码:
LayoutInflater.from(parent.getContext()).inflate(R.layout.item_tag, parent, false);