LayoutInflater与findViewById的用法有很多可比较之处。
如:他们都可以通过id返回View。
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_dialog,null);
Button button = (Button) findViewById(R.id.button);
不同之处是:LayoutInflater是用来实例化整个布局文件,而findViewById()是实例化布局文中中的View。
下面是一个实例。 主布局main.xml里有一个TextView和一个Button,当点击Button,出现Dialog,而这个Dialog的布局方式是我们在layout目录下定义的custom_dialog.xml文件(里面左右分布,左边 ImageView,右边TextView)。
效果图如下:
源代码如下:
main.xml:
custom_dialog.xml:
TestLayoutInflater.java:
几点说明:
- LayoutInflater的获取有三种方法:Activity.getLayoutInflater(), LayoutInflater.from(Context), getSystemService(String).
- 也可以不通过AlertDialog的内部类AlertDialog.Builder来获取AlertDialog对象,AlertDialog也能setView(View).另外,注意:AlertDialog的构造函数有些特殊,需要加{},如果去掉就报“The constructor AlertDialog(Context) is not visible”的错误。