如何通过Java向布局中添加新对象?Android

3
例如,我通过以下方式获取了一个ImageView:
public ImageView get_image_by_name(String name)
{
    int image_id = getResources().getIdentifier(name , "drawable", getPackageName());
    return (ImageView)findViewById(image_id);
}

不确定它是否能正常工作。

我该如何将它添加到布局中?


不,这不是你应该这样做的方式。你的代码将 image_id 赋值为可绘制资源的 id ,而不是 ImageView 的 id 。即使上一行没有问题,你的 findViewById() 调用也会返回 null。 - Geobits
3个回答

1
假设这个函数放在Activity的某个位置,你可以尝试这样做:
public ImageView get_image_by_name(String name)
{
    int image_id = getResources().getIdentifier(name , "drawable", getPackageName());
    ImageView iv = new ImageView(this);
    ViewGroup.LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    iv.setLayoutParams(lp);
    iv.setImageDrawable(getResources().getDrawable(image_id));
    return iv;
}

您也可以更改LayoutParams以满足您的要求。


0

所有布局都派生自ViewGroup,因此它们都有一个名为addView的函数。将ImageView传递给它。


0

不确定它是否有效

答案是你说得对,你当前的代码不起作用,因为你试图在当前布局中查找任何可绘制资源作为imageView。将您的代码更改为返回动态创建的imageView:

public ImageView get_image_by_name(String name)
{
    int image_id = getResources().getIdentifier(name , 
                   "drawable", getPackageName());
    ImageView imageView=new ImageView(Your_Current_Activity.this);
    imageView.setImageDrawable(image_id);
    imageView.setLayoutParams(new    
                 LayoutParams(LayoutParams.WRAP_CONTENT,
                                    LayoutParams.WRAP_CONTENT));
    return imageView;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接