美文网首页
LayoutInflater使用

LayoutInflater使用

作者: 龙马君 | 来源:发表于2018-04-23 17:01 被阅读16次

    LayoutInflater

    主要用于加载布局,把xml转为View

    获取实例的方法

    • LayoutInflater inflater = LayoutInflater.from(this);
    • LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    使用

    layoutInflater.inflate(resourceId, root);

    public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)

    • resource xml布局
    • root 接收View的容器
    • attachToRoot是否添加到容器中

    举例:

    // 1. 返回的是button_layout的布局view, 不设置root, 此时view的根布局属性失效
    // button的layout_width和layout_height都为wrap_content
    View view = getLayoutInflater().inflate(R.layout.button_layout, null);
    mainlayout.addView(view);

    // 2. 返回的是mainlayout, 此时view的根布局属性有效
    // button的layout_width和layout_height都为match_parent
    View view = getLayoutInflater().inflate(R.layout.button_layout, mainlayout);

    // 3. 返回的是button_layout的布局view, 此时view的根布局属性有效
    // button的layout_width和layout_height都为match_parent
    View view = getLayoutInflater().inflate(R.layout.button_layout, mainlayout, false);
    mainlayout.addView(view);

    button_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <Button xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="button">
    </Button>
    

    root

        <LinearLayout
            android:id="@+id/mainlayout"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:orientation="horizontal" />
    

    设置View在布局中的大小的,也就是说,首先View必须存在于一个布局中,之后如果将layout_width设置成match_parent表示让View的宽度填充满布局,如果设置成wrap_content表示让View的宽度刚好可以包含其内容,如果设置成具体的数值则View的宽度会变成相应的数值。这也是为什么这两个属性叫作layout_width和layout_height,而不是width和height。

    常用的地方:

    1. Fragment使用:
      xml里面的布局是有效的
      mView = inflater.inflate(getLayoutId(), container, false);
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            // 后面container会再调用addview, 因此这里attachtoroot=false
            // 见FragmentManger的1309行
            View view = inflater.inflate(R.layout.fragment_t, container, false);
            return view;
        }
    
    1. ListView的Adapter, 外层的layout_width和layout_heigth都是wrap_content
      View view=inflater.inflate(R.layout.layout_student_item,null);

    相关文章

      网友评论

          本文标题:LayoutInflater使用

          本文链接:https://www.haomeiwen.com/subject/mvpllftx.html