题目:给最外层的rootview,把这个根视图下的全部button背景设置成红色,手写代码,不许用递归
算法原理:
- Android的view视图是按树形结构分布,所以按树形结构遍历
- 循环判断每一层的ViewGroup元素,将其入栈;否则判断当前view是否是Button类实例,是则改写背景色
- 当前ViewGroup检查childView完成后,判断栈是否非空,取出栈顶元素ViewGroup重复步骤2直至栈为空。
void changeAllBtnBGColor(View view, int color) {
if (view == null || !(view instanceof ViewGroup))
return;
Stack<View> m = new Stack<>();
while (view != null) {
ViewGroup tmpGroup = (ViewGroup) view;
int count = tmpGroup.getChildCount();
for (int i = 0; i < count; i++) {
View child = tmpGroup.getChildAt(i);
if (child instanceof ViewGroup)
m.add(child);
else if (child instanceof Button) {
child.setBackgroundColor(color);
}
}
if (m.isEmpty())
break;
else view = m.pop();
}
}