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中的任何想放的位置
以后有时间在研究这个方法吧

浙公网安备 33010602011771号