/**
* 布局获取最深层View
* @param view
* @param layerCount 布局层数
* @return HashMap
*/
private HashMap<String, Object> getDeepView (View view, int layerCount){
HashMap<String, Object> map = new HashMap<>();
if ( view instanceof ViewGroup){
ViewGroup vp = (ViewGroup) view;
if (vp.getChildCount() == 1){
return getDeepView(vp.getChildAt(0),layerCount+1);
}
//冒泡排序子View , 记录层数最大的view 以及层数
for (int i = 0; i < vp.getChildCount()-1; i++) {
View childi = vp.getChildAt(i);
HashMap<String, Object> mapi = getDeepView(childi, layerCount + 1);
for (int j = i+1; j < vp.getChildCount(); j++) {
View childj = vp.getChildAt(j);
HashMap<String, Object> mapj = getDeepView(childj, layerCount + 1);
map = (int) mapi.get("count") > (int)mapj.get("count") ? mapi : mapj;
}
}
return map;
}else {
map.put("view",view);
map.put("count",layerCount);
return map;
}
}
/**
* 遍历所有view
* @param view
* @return
*/
private List<View> getChildViews(View view) {
List<View> allChildren = new ArrayList<>();
if (view instanceof ViewGroup){
ViewGroup vp = (ViewGroup) view;
for (int i = 0; i < vp.getChildCount(); i++) {
View viewChild = vp.getChildAt(i);
allChildren.add(viewChild);
allChildren.addAll(getChildViews(viewChild));
}
}
return allChildren;
}
前几天面试遇到的一道题,自己测试结果是对的,不过优化的潜力还很大,大家有好的建议,改进可以留言....一起讨论,让代码更加优美。