Android应用开发那些事

LayoutInflater 的 inflate 方法的几个参数

2020-01-11  本文已影响0人  Cliper
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)

LayoutRes int resource:
当前需要显示的layout资源ID

ViewGroup root:父view

boolean attachToRoot:
是否绑定到root view:resource是否作为root ViewGroup的Child

注意这里说的resource只是针对 resource自己的跟节点失效。
如下面layout 》LinearLayout 的android:gravity属性,而并非Button的android:layout_width

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ll"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="@color/colorPrimary"
    android:gravity="center"
    android:orientation="vertical">
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

1和2的效果是一样的
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);

1.View view = inflater.inflate(R.layout.linearlayout, ll, true)

  1. View view = inflater.inflate(R.layout.linearlayout, ll, false)
    ll.addView(view);

源码如下

//当调用1.0 resource 会调用1.1
1.0 View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
1.1      View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot)
1.2            //创建匹配根目录的布局参数
               params = root.generateLayoutParams(attrs);
               if (!attachToRoot) {
                    //设置临时的布局参数,temp为root的布局参数
                     temp.setLayoutParams(params);
                }
                
1.3            if (root != null && attachToRoot) {
                    //当attachToRoot == true添加到root容器中
                    root.addView(temp, params);
                }

参考:
三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

上一篇下一篇

猜你喜欢

热点阅读