在我的应用程序上,当您将其解锁时,将打开一个数据库连接,我会从URL动态下载徽标。
如何遍历布局文件以在每个imageview上设置该位图?
for (int i = 0; i < ???; i++) {
int id = getResources().getIdentifier("logo", "id", getPackageName());
if(id != 0) {
ImageView imageView = findViewById(id);
imageView.setImageBitmap(myBitmap);
}
}
每个视图中的所有ID均为“徽标”,但它们位于不同的文件中。
答案 0 :(得分:0)
只要您对根视图有引用,就可以使用递归方法扫描整个视图层次结构。
private void updateAllImages(View v) {
if (v instanceof ImageView) {
((ImageView) v).setImageBitmap(myBitmap);
} else if (v instanceof ViewGroup) {
ViewGroup group = (ViewGroup) v;
for (int i = 0; i < group.getChildCount(); i++) {
updateAllImages(group.getChildAt(i));
}
}
}
此方法接受任何视图,然后:
ImageView
,则设置图像位图ViewGroup
,则为每个孩子称呼自己当您将视图树的根视图传递给此方法时,它将结束对整个树的扫描并更新其找到的每个ImageView。
如果您有一些不想更新的ImageView,那么您也可以添加一些逻辑。您提到要更新的每个视图都有logo
ID,因此您可以检查一下:
private void updateAllImages(View v) {
if (v instanceof ImageView && v.getId() == R.id.logo) {
((ImageView) v).setImageBitmap(myBitmap);
} else if (v instanceof ViewGroup) {
ViewGroup group = (ViewGroup) v;
for (int i = 0; i < group.getChildCount(); i++) {
updateAllImages(group.getChildAt(i));
}
}
}