LayoutInflater使用
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。
常用的地方:
- 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;
}
- ListView的Adapter, 外层的layout_width和layout_heigth都是wrap_content
View view=inflater.inflate(R.layout.layout_student_item,null);