android开发之LayoutInflater

来源:互联网 发布:莽荒纪神魔盾进阶数据 编辑:程序博客网 时间:2024/05/08 14:45
LayoutInflater的使用,在实际开发种LayoutInflater这个类还是非常有用的,它的作用类似于 findViewById(),不同点是:
  LayoutInflater是用来找layout下xml布局文件,并且实例化!
  findViewById()是找具体xml下的具体 widget控件(如:Button,TextView等)。

  补充总结:
  1.一般来讲,我们用LayoutInflater做一件事:inflate。inflate这个方法总共有四种形式,目的都是把xml表述的layout转化为View。(This class is used to instantiate layout XML file into its corresponding View objects . It is never be used directly -- use getLayoutInflater() or getSystemService(String)getLayoutInflater() or getSystemService(String) to retrieve a standard LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are running on)。

  2.获得LayoutInflater的方法:
  1)通过SystemService获得
  LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  2)从给定的context中获得
  LayoutInflater inflater = LayoutInflater.from(context);
  两者区别:实质是一样的,看方法(2)源码

  public static LayoutInflater from(Context context) { 
      LayoutInflater LayoutInflater = 
              (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      if (LayoutInflater == null) { 
          throw new AssertionError("LayoutInflater not found."); 
      } 
      return LayoutInflater; 
  }

  3.LayoutInflater.inflate()
  将Layout文件转换为View,顾名思义,专门供Layout使用的Inflater。虽然Layout也是View的子类,但在android中如果想将xml中的Layout转换为View放入.java代码中操作,只能通过Inflater,而不能通过findViewById(),这一段描述有误,看如下代码 。看下面文档写的已经很清楚。

  <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical"  
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
     
      <LinearLayout android:id="@+id/placeslist_linearlayout" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:orientation="vertical"> 
         
      </LinearLayout>    
  </ScrollView>

  LinearLayout linearLayout = (LinearLayout) findViewById(R.id.placeslist_linearlayout);
  linearLayout.addView(place_type_text);
  这是可运行的,这上面的xml中,LinearLayout不再是Layout的代表,而只是一个普通的View。


原创粉丝点击