填充布局的几种方式

获取填充对象

1
LayoutInflater inflater=LayoutInflater.from(context);
2
LayoutInflater inflater= getLayoutInflater();
3
LayoutInflater  inflater= (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;                                                                                                      

这三种获取填充对象的方式如出一辙,第二种是调用activity的getLayoutInflater(),实际上是调用PhoneWindow的getLayoutInflater()

 public PhoneWindow(Context context) {
        super(context);
        mLayoutInflater = LayoutInflater.from(context);
    }

第三种实际上就是系统对第一种进行的封装

@Override
    public Object getSystemService(String name) {
        if (LAYOUT_INFLATER_SERVICE.equals(name)) {
            if (mInflater == null) {
                mInflater = LayoutInflater.from(getBaseContext()).cloneInContext(this);
            }
            return mInflater;
        }
        return getBaseContext().getSystemService(name);
    }

填充方式

1
View view = LayoutInflater.from(context).inflate(int resource, ViewGroup root); 

第一个参数是布局文件id,第二个参数root是当前填充布局的父布局,如果没有父布局就填null。这样可以把view添加到准备好的布局中,如果父布局root不为null,默认attachToRoot为true,为true的目的是填充布局会自动添加到父布局中,不用手动addView。

2

除了有两个个参数的inflate(resourceId, root);,还发现有三个参数的填充方式。

LayoutInflater.from(context).inflate(int resource, ViewGroup root, boolean attachToRoot);

如果设置root为null,attachToRoot将失去作用,无论设置的是false还是true。

如果不为空的话,attachToRoot为false,填充布局不会被直接add进布局,需要调用父布局的addView 方法添加进去,这时候父布局的属性自动生效。;

LayoutInflater.from(context).inflate(int resource, ViewGroup root, false);

此时如果attachToRoot为true,再次addView的话,会造成重复添加。

getView方法中attachToRoot必须为false,getView会不断的自动添加和销毁View,如果为true,会造成多次添加异常。

activity中setContentView没有设置root,我们会以为root为null,最外层的布局无论设置什么属性都不起作用。但是为什么我们可以设置最外层的属性并且生效,因为系统在我们的布局文件外面加了一层FrameLayout。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值