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

LayoutInflater

程序员文章站 2024-02-11 08:01:46
...
  1. 获取LayoutInflater 对象 有三种方法
    LayoutInflater inflater=LayoutInflater.from(this);
    LayoutInflater inflater=getLayoutInflater();
    LayoutInflater inflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
  2. inflate方法 public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
        LayoutInflater inflater = LayoutInflater.from(this);
        inflater.inflate(R.layout.linearlayout, ll,true);
    }
    
 当root不为null,attachToRoo为true时候,会自动将第一个参数所指定的R.layout.linearlayout,添加到第二个参数所指定的view中,如果我在最后一行添加 II.addView(inflate)方法 则会报错
 java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
当 root不为null,attachToRoot为false,如果我在最后一行添加 II.addView(inflate)方法 可以运行,和正常一样。II.addView(inflate)方法,我们也可以在xml界面中直接添加
当root为null,attachToRoot无论为null或者不为null都一样,但是linearlayout II并没有处于某一个容器中,所以它的根节点的宽高属性会失效,这个时候不管我给linearlayout的根节点的宽高设置什么,都是没有效果的,它都是包裹button,如果我修改button,则button会立即有变化,因为button是处于某一个容器中的。