-
简介
- 在Android开发过程中,很多地方都不可避免的使用到inflate方法,如在给
Fragment
进行CreateView(创建视图)
时,我们通常是inflater.inflate(R.layout.xxx, container, false)
来调用inflate方法的,不难发现,inflate方法的作用是将一个 xml 布局文件变成一个 view 对象。
- 在Android开发过程中,很多地方都不可避免的使用到inflate方法,如在给
-
注意事项:
-
这玩意是用来将 xml 转换为 view 的
-
这玩意不能直接new初始化,通过
Activity
和SystemService
获取,你也可以自定义他的源方法 -
因为性能问题,他只能把写在layout里被预处理过的 xml 转换为 view ,不能随便找个 xml 文件就让他转换
-
-
参数解析
-
inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
方法有三个参数-
resource:视图资源,由于视图是R类内的layout管控,通常传参形式为
R.layout.xx
,xx
代表视图布局的 **xml **文件 -
root:容器,view和它的关系就是水与水容器的关系,显而易见,它是管控视图xml文件内控件的
width、height
等等属性的,如果为null
,那部分属性就会失去效用,甚至直接导致编译的程序崩溃,通常传承形式为ViewGroup
类型的对象,例如在此方法调用之前定义一个变量ViewGroup viewGroup = findViewById(R.id.xx)
,xx
代表最高级别视图的ID,后面进行传参viewGroup
即可。也可以直接在getView无法获取到视图资源时(findViewById无法使用)重载onCreateView方法编辑它进行绑定视图资源:@Override public View onCreateView(LayoutInflater inflater, ViewGroup container) { View view = inflater.inflate(R.layout.xx, container, false); myGetView(view); //绑定指定view return view; } public void myGetView(View view){ //在这里进行view的功能操作 }
-
attachToRoot:布尔值类型的参数,ture/false,代表是否需要一键addView。例如通常情况下想要看到自己布局的视图是需要addView进行添加视图的:
public class MainActivity extends AppCompatActivity { @override protected void oncreate(Bundle savedInstancestate){ super.oncreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup viewGroup = findViewById(R.id.viewgroup); View view = getLayoutInflater().inflate(R.layout.xx, viewGroup, false); viewGroup.AddView(view) } }
传入true参数即可省略AddView步骤:
public class MainActivity extends AppCompatActivity { @override protected void oncreate(Bundle savedInstancestate){ super.oncreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup viewGroup = findViewById(R.id.viewgroup); View view = getLayoutInflater().inflate(R.layout.xx, viewGroup, true); } }
-
-