用于布局文件

时间:2019-01-23 16:20:24

标签: android

在我的应用程序上,当您将其解锁时,将打开一个数据库连接,我会从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均为“徽标”,但它们位于不同的文件中。

1 个答案:

答案 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));
        }
    }
}