欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Activity布局创建

程序员文章站 2022-05-30 23:13:20
...

一个Activity在setContentView后创建的布局以及布局在Activity内的层级如下:

Activity布局创建

setContentView整个过程

1. 创建DecorView,DecorView实际是一个FrameLayout;

2. 依据theme加载不同的窗口修饰布局文件;

3. 加载setContentView指定的布局,并且把它添加到窗口修饰布局文件中id为content的FrameLayout里;

获取LayoutInflater的两种方式

    LayoutInflater lif = LayoutInflater.from(Context context);

    LayoutInflater lif = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

可以看见from方法仅仅是对getSystemService的一个安全封装而已

    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;
    }

resource,root,attachToRoot

  • root不为空时,才会给resource 根布局设置LayoutParams,否则根布局layout_width、layout_height不生效;

  • resource:布局文件id;root:要把xml布局添加到的根布局;attachToRoot:是否添加root作为父布局,为true时执行addView操作;

  • 无论root attachToRoot两个参数如何设置,都会设置resource里除根布局下面的子View 的LayoutParams。因为在xml文件里,只有根布局的父View是不确定的;