View以及所有控件是如何得知我们在布局设置的控件ID的.
【Attrs.xml文件】
# attrs.xml 文件. <declare-styleable name="View"> <!-- reference 代表某一个资源文件!! --> <attr name="id" format="reference" /> ... ...(N多信息哈,自己看代码) </declare-styleable>
【View的初始化】
public static final int NO_ID = -1; ... ... @ViewDebug.ExportedProperty(resolveId = true) // (注解) android-19/android/View/ViewDebug.java int mID = NO_ID; // 保存控件ID,默认值-1. ... ... public View(Context context, AttributeSet attrs, int defStyleAttr) { this(context); // 获取attrs.xml属性文件中的View. TypedArray a = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.View, defStyleAttr, 0); ... ... ... ...(N多代码,省略!!) for (int i = 0; i < N; i++) { int attr = a.getIndex(i); switch (attr) { ... ...(N多代码,省略!!) case com.android.internal.R.styleable.View_id: // 控件ID,获取View中的字段id. mID = a.getResourceId(attr, NO_ID); break;
【设置控件ID】
// 设置控件ID. public void setId(int id) { mID = id; if (mID == View.NO_ID && mLabelForId != View.NO_ID) { mID = generateViewId(); } }
【获取控件ID】
// 获取控件ID. @ViewDebug.CapturedViewProperty public int getId() { return mID; }
fff
fff
Android-Widget源码分析,布布扣,bubuko.com
时间: 2024-10-14 06:32:05