Android开发 - inflate创建视图将xml布局转换view对象解析

  • 简介

    • 在Android开发过程中,很多地方都不可避免的使用到inflate方法,如在给Fragment进行CreateView(创建视图)时,我们通常是inflater.inflate(R.layout.xxx, container, false)来调用inflate方法的,不难发现,inflate方法的作用是将一个 xml 布局文件变成一个 view 对象。
  • 注意事项

    1. 这玩意是用来将 xml 转换为 view

    2. 这玩意不能直接new初始化,通过ActivitySystemService获取,你也可以自定义他的源方法

    3. 因为性能问题,他只能把写在layout里被预处理过的 xml 转换为 view ,不能随便找个 xml 文件就让他转换

  • 参数解析

    • inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) 方法有三个参数

      1. resource:视图资源,由于视图是R类内的layout管控,通常传参形式为R.layout.xxxx代表视图布局的 **xml **文件

      2. 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的功能操作
        }
        
      3. 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);
            }
        }
        
posted @ 2024-07-20 09:14  阿俊学JAVA  阅读(10)  评论(0编辑  收藏  举报