写在前边

  • 现在的时间:2019-3-20

知识预备

控件的宽和高
  • 这两个属性表示在容器中的大小,也就是说控件必须指定父布局这两个属性才能起作用。
  • 为什么Activity布局文件根节点的宽高属性可以起作用
    • Android中有一个顶级View叫做DecorView,DecorView中包含一个竖直方向的LinearLayout,LinearLayout由两部分组成,第一部分是标题栏,第二部分是内容栏,内容栏是一个FrameLayout.
    • 我们在Activity中调用setContentView就是将View添加到这个FrameLayout中,所以说布局文件也有父布局。
  • addView函数不能达到指定父布局效果
  • inflate()函数可以指定父布局,并且可将父布局指定为自己,但指定为自己的话宽和高会失效
如何调用inflate()函数
  • 首先要获得一个LayoutInflater的实例,有三种方法,这三种方法实质上是相同的,最常用的是第一种。
    • LayoutInflater inflater1 = LayoutInflater.from(this);
    • LayoutInflater inflater2 = getLayoutInflater();
    • LayoutInflater inflater3 = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  • 然后使用这个实例调用inflate方法
    inflater.inflate(xxxxxxx)
inflate函数的作用
  • 作用一:可以获取某个xxx.xml布局文件,这个函数的返回值就是获取的布局文件
    • findViewById()函数是获取布局文件中的某个控件,这个函数就是获取布局文件。
  • 作用二:将布局文件添加到某个布局中
其他
  • inflate的意思:使充气
  • 音标:/ɪnˈfleɪt/

inflate()方法参数解析

三个参数的
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
  • 第一个参数:要获取的布局,传入R.layout.xxx
  • 第二个参数:这个参数也是一个布局,是为第一个参数指定的父布局。
  • 第三个参数(如果第二个参数为null这个参数将失去作用)
    • true:将第一个参数表示的布局添加到第二参数的布局中。
    • false:不将第一个参数表示的布局添加到第二参数的布局中。
      • 既然不添加,那么为什么第二个参数不设置为null呢。
      • 不添加的话,这个函数就只剩下一个作用了,那就是获取布局,为了使第一个参数的宽高属性不失效,所以要为他指定一个父布局
两个参数的
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root)
  • 第一个参数:要获取的布局,传入R.layout.xxx
  • 第二个参数:这个参数也是一个布局,是为第一个参数指定的父布局。
    • 如果这个参数是null就不把第一个参数的布局添加进来
    • 如果这个参数不是null就把第一个参数的布局添加进来

查看源码它其实还是调用三个参数的

public View inflate(@LayoutRes int resource, @Nullable ViewGroup root) 
{
    return inflate(resource, root, root != null);
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐