Android中LayoutInflater的使用 更新中....

 Inflater英文意思是膨胀,在Android中应该是扩展的意思吧。 
    LayoutInflater的作用类似于 findViewById(),不同点是LayoutInflater是用来找layout文件夹下的xml布局文件,并且实例化!而 findViewById()是找具体某一个xml下的具体 widget控件(如:Button,TextView等),她可以有很多地方可以使用,如   BaseAdapter的getView中,自定义Dialog中取得view中的组件widget等等。

它的用法有2种:

1 view plaincopy to clipboardprint?  
2 LayoutInflater inflater = LayoutInflater.from(this);
3 View view=inflater.inflate(R.layout.ID, null);
4 或者干脆并成一句:
5 View view=LayoutInflater.from(this).inflate(R.layout.ID, null);

 或者:

1 view plaincopy to clipboardprint?  
2 LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
3 View view=inflater.inflate(R.layout.ID, null);

 上面2种方法本质上是一样的,看下面的源码,form()调用的就是getSystemService():

1 public static LayoutInflater from(Context context) {       
2 LayoutInflater LayoutInflater =
3 (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
4 if (LayoutInflater == null) {
5 throw new AssertionError("LayoutInflater not found.");
6 }
7 return LayoutInflater;
8 }

  另外getSystemService()是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

 

 基本用法

 1 Java代码  
2 //基本用法
3 public void showCustomDialog(){
4 AlertDialog.Builder builder;
5 AlertDialog alertDialog;
6 Context mContext = AppActivity.this;
7 //下面俩种方法都可以
8 //LayoutInflater inflater = getLayoutInflater();
9 LayoutInflater inflater = (LayoutInflater)
10 mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
11 View layout = inflater.inflate(R.layout.custom_dialog,null);
12 TextView text = (TextView) layout.findViewById(R.id.text);
13 text.setText("Hello, Welcome to Mr Wei's blog!");
14 ImageView image = (ImageView) layout.findViewById(R.id.image);
15 image.setImageResource(R.drawable.icon);
16 builder = new AlertDialog.Builder(mContext);
17 builder.setView(layout);
18 alertDialog = builder.create();
19 alertDialog.show();
20 }
21 }
22
23 protected void showToast(int type) {
24 Toast.makeText(this, "*********", Toast.LENGTH_LONG).show();
25
26 LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
27 View view = li.inflate(R.layout.toast, null);
28
29 Toast toast = new Toast(this);
30 toast.setView(view);
31 toast.setDuration(type);
32 toast.show();
33 }

  

posted @ 2011-08-10 14:30  水向东流  阅读(1527)  评论(1编辑  收藏  举报