android中的Inflater

时间:2022-08-08 01:28:11


android 提供了一个工具 能够把int 的 *.xml 文件转化为 View 这就是XxxInflater 主要有2种:
* LayoutInflater
* MenuInflater
通常使用:

MenuInflater mInflater = getMenuInflater();
LayoutInflater lInflater = getLayoutInflater();



上述二者仅在 Activity 中才有效!



MenuInflater具体使用方法


比如现在在res目录下创建menu文件夹有一个关于menu的描述文件 menu_item.xml 如下:


<?xml version="1.0" encoding="utf-8"?>    
<menu xmlns:android="http://schemas.android.com/apk/res/android">    
    <item     
        android:id="@+id/Item_1"     
        android:title="Item_1"  
        android:icon="@android:drawable/ic_menu_add"
    />    
    <item     
        android:id="@+id/Item_2"     
        android:title="Item_2" />    
    <item     
        android:id="@+id/Item_3"     
        android:title="Item_3"   
        android:enabled="false"  />    
</menu>



现在把它转化为 View.


public boolean onCreateOptionsMenu(Menu menu) { 
super.onCreateOptionsMenu(menu); 
MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.layout.menu_item, menu); 
return true; 
}




public boolean onOptionsItemSelected(MenuItem item) {     
      switch (item.getItemId()) {     
      case R.id.Item_1:                   
          break;     
      case R.id.Item_2:     
          break;     
      case R.id.Item_3:     
          break;      
     }     
     return super.onOptionsItemSelected(item);     
}



更复杂一点的menu:


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="Play" android:id="@+id/media_play"
  android:icon="@android:drawable/ic_media_play"/>
<item android:title="Pause" android:id="@+id/media_pause"
  android:icon="@android:drawable/ic_media_pause"/>
<item android:title="File" android:id="@+id/file">
<menu>
<item android:title="Open..." android:id="@+id/file_open"/>
<item android:title="Save" android:id="@+id/file_save"/>
<item android:title="Save as" android:id="@+id/file_saveas"/>
<item android:title="Exit" android:id="@+id/file_exit"/>
</menu>
</item>
<item android:title="Edit" android:id="@+id/edit">
<menu>
<group>
<item android:title="Copy" android:id="@+id/edit_copy"/>
<item android:title="Paste" android:id="@+id/edit_paste"/>
<item android:title="Cut" android:id="@+id/edit_cut"/>
<item android:title="Delete" android:id="@+id/edit_delete"/>
</group>
</menu>
</item>
</menu>



LayoutInflater 和 MenuInflater 的使用基本类似 也是根据int 的 *.xml 文件得到 View 所不同的就是 嵌套原因 所以多了一个参数-ViewGroup 用来表示 父View 比如:在 LinearLayout layout 里面有一个 TextView 且其用tv.xml 描述 那么应该如下使用


LayoutInflater inflater = getLayoutInflater(); 
inflater.inflate(R.layout.tv,layout);



LayoutInflater更详细的用法见下面:


http://gundumw100.iteye.com/admin/blogs/825503