Android UI LayoutInflater的使用

《》我们知道在Activity 中如果想要将一个组件找到使用findViewById()即可做到,但是用这个方法找回的组件只能够是setContentView()这个方法中加载XML布局文件中定义的组件(也就是说明了这样一个问题,那就是说findViewById()这个方法必须要在setContentView()方法调用之后才能够调用,否则就会报错),那么这就造成了一个问题,那就是如果我们想在Activity中找回的组件不是上面的那个方法中组件怎么办呢?

《》这就要用到LayoutInflater 类了,这个类的对象实际上不仅仅是解决上面的问题的,还有一个非常重要,那就是将一个XML文件加载转换成一个View类型的对象。从而我们通过这个View类型的对象的findViewById()就能够找到这个XML文件中定义的所有的组件,在对他们进行一些操作。由于LayoutInflater能够关联任何XML文件,那么就没有上面《》所说的限制了。

《》遵循下面的这几个步骤就能够顺利的将一个XML文件加载转换成为一个View组件对象

①创建LayoutInflater对象的三种方法:

LayoutInflater inflater = LayoutInflater.from(Context context) ;一般参数设为this即可

LayoutInflater inflater = getLayoutInflater() ;

LayoutInflater inflater = (LayoutInflater)context.getSystemService

                                       (context.LAYOUT_INFLATER_SERVICE);

同样context设为this即可;

②通过上面创建的LayoutInflater对象将指定的XML文件转换成View组件对象:

调用LayoutInflater类中的

public  View  inflate(int resource, ViewGroup root)

参数 resource 就设成需要转换的XML文件,如:R.layout.dialog

参数 root 设为null即可

③当然我们将XML文件转换成为View对象之后,就能够通过View类中的

findViewById()找到其中的所有的组件元素,之后就能够操作它们了

需要注意的是在View类中也有一个

public static View inflate(Context context ,int resource ,ViewGroup root)方法

也就是说我们完全可以直接通过创建一个View类的对象,之后调用View类的inflate方法

将 View对象进行包装,这样同样可以创建自己的View组件:

View vv = View.inflate(this, R.layout.layout_2, null);

LinearLayout ll = (LinearLayout) findViewById(R.id.box_1);

ll.addView(vv,new LinearLayout.LayoutParams

( ll.getLayoutParams().width,ll.getLayoutParams().height));

 ⑤此外我还想说一个问题:一般来说inflate(参数)这个方法多使用在Fragment的onCreateView(参数)方法中,用于动态的加载将一个XML文件解析成一个View组件

inflate(参数)这个方法中的参数很晦涩难懂,现在还不知道到底怎么使用这个方法,但是要正视这样一个问题:

不论我们使用<fragment.../>还是使用java代码来替换一个Fragment,我们都能够将一个Fragment添加到Activity中的指定的位置,你想:

1、如果我们使用<fragment.../>标签的话,那么我们自然而然的就能够指定他的位置,比如如果Activity的布局的根元素是相对布局,那么我们可以指定<fragment..../>中的android:layout_below="@id/textView"等方法,指定这个<fragment.../>应该位于哪个组件的那个方位

2、如果我们使用java代码来替换一个Fragment的话,那么这个Fragment对象一定要放在Activity中已经放好的<FrameLayout......>中

所以这样的话,我们只要通过使用inflate(参数)将一个XML文件解析成一个View,那么我们就能够将这个Fragment放在Activity中的任何想放的位置

以后有时间在研究这个方法吧

posted @ 2014-09-21 21:32  RoperLee  阅读(295)  评论(0)    收藏  举报