Slide 6
Slide 6 text
LayoutInflater.java
public abstract class LayoutInflater {
public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot) {
final Resources res = getContext().getResources();
...
final XmlResourceParser parser = res.getLayout(resource);
try {
return inflate(parser, root, attachToRoot);
} finally {
parser.close();
}
}
}
public abstract class LayoutInflater {
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
synchronized (mConstructorArgs) {
...
try {
// Temp is the root view that was found in the xml
final View temp = createViewFromTag(root, name, inflaterContext, attrs);
ViewGroup.LayoutParams params = null;
if (root != null) {
// Create layout params that match root, if supplied
params = root.generateLayoutParams(attrs);
if (!attachToRoot) {
// Set the layout params for temp if we are not
// attaching. (If we are, we use addView, below)
temp.setLayoutParams(params);
}
}
...
// We are supposed to attach all the views we found (int temp)
// to root. Do that now.
if (root != null && attachToRoot) {
root.addView(temp, params);
}
...
} catch (XmlPullParserException e) {
...
} finally {
...
}
return result;
}
}
public abstract class LayoutInflater {
View createViewFromTag(View parent, String name, Context context,
AttributeSet attrs,boolean ignoreThemeAttr) {
...
View view = tryCreateView(parent, name, context, attrs);
...
}
public final View tryCreateView() {
...
view = mFactory2.onCreateView(parent, name, context, attrs)
...
return view
}
}
AppCompatDelegateImpl. onCreateView()
にて実現する