/**
* 獲取View的深度/層級
* @param view
* @return
*/
public int getViewLevel(View view) {
int level = 0;
if(null == view) {
return level;
}
if(view instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) view;
//用於遍歷所以的Viewgroup 保證循環繼續下去
LinkedList<View> queue = new LinkedList();
queue.add(viewGroup);
while(!queue.isEmpty()) {
//層級加1;
level++;
//這裏需要獲取size後再循環,不然,一邊循環,一邊後面循環到的ViewGroup類型的View還有子孩子的話,
// 會繼續添加,下面的第一層for就會一直循環(如果使用i < queue.size()的方式的話)
//這裏是獲取層級,所以需要在level++後,將list中當前的View給遍歷完,相當於遍歷的是當前的一層
//如果遍歷完當前List中的view(當前的一層)後,while循環發現List依然不是空的,則說明後面添加
//了新的控件,而且是當前一層的所有有子孩子的ViewGroup的所有子孩子控件,這就是下一層了,
//當然while就會再次進入循環內,就再次執行了level++;層級就+1了
int size = queue.size();//這裏需要獲取size後再循環
for (int i = 0; i < size; i++) {
View view1 = queue.removeFirst();
ViewGroup groupItem;
//循環隊列,把當前隊列的Viewgroup類型的子孩子添加到後面
if(view1 instanceof ViewGroup && (groupItem = (ViewGroup) view1).getChildCount() > 0){
for (int j = 0; j < groupItem.getChildCount(); j++) {
queue.addLast(groupItem.getChildAt(j));
}
}
}
}
}else {
level = 1;
}
return level;
}