package net.example.view;
class StatusBar extends View { ... }
我在布局中使用它如下:
<net.example.view.StatusBar .../>
我必须通过它的类型(类)找到它,我的意思是:
myActivityInstance.findViewsByClass(StatusBar.class) // returns View[]
有可能吗?如果没有,在不使用findViewById()的情况下找到元素的更好方法是什么?
感谢。
答案 0 :(得分:2)
如果你不能使用id而你的内容视图是某种ViewGroup,你可以迭代孩子们。
ViewGroup vg = (ViewGroup) activity.getContentView();
for(int i=0; i<vg.getChildCount(); i++) {
View v = vg.getChildAt(i);
if(v instanceof StatusBar) {
// do something interesting.
}
}
此外,如果您知道具体索引,则可以直接致电getChildAt(index)
。
答案 1 :(得分:0)
我不认为activity有一个方法会根据类类型返回一个Views数组。如果你想在不使用findViewById()的情况下获取它们的数组,你可以动态地创建它们并将它们添加到你的布局中:
mLayout = (LinearLayout)findViewById(R.id.mLayout);
StatusBar[] mBars = new StatusBar[10];
for(int i = 0; i < mViews.length; i++){
mBars[i] = new StatusBar(yourActivity.this);
mLayout.addView(mBars[i]);
}
这将为您提供一个充满StatusBar对象的数组,这些对象已添加到您的布局中。 (如果你想也可以制作View类型的数组。)
如果您想要在XML中定义所有视图,我认为有一种方法可以避免在类似于此的循环中使用findViewById()来获取一个充满对所有这些视图的引用的数组。对于这种方法,您可能必须创建一个与包含视图的所有resID相同大小的整数数组
ids[0] = R.id.mStatusBar1;
ids[1] = R.id.mStatusBar2;
等