ImageView的getLayoutParams()方法返回null。

29

我使用这种简单的方法编写程序来动态创建小部件:

private ImageView getModuleIconView(Module module) {
    ImageView view = new ImageView(context);
    view.setImageResource(module.getIconResId());        
    view.getLayoutParams().height = 50; //NullPointerException
    return view;
}
我遇到了空指针异常,因为getLayoutParams返回null。为什么会这样?

5
因为您的ImageView没有放在屏幕上,所以它没有任何布局参数或大小。 - yahya
不知道这个。我猜你应该把它发表为一个答案。 - Jacek Kwiecień
2个回答

61

因为您的ImageView是在空中,没有放置在屏幕上。所以它没有任何布局参数或大小。

如果您想将图像高度设置为50,可以考虑设置此视图的layoutParams... 您可以将layoutParams的高度设置为50。这样它就会实现您想要的效果。

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 50));
 img.setLayoutParams(lp);

这些代码将把你的图片高度设置为50,但是请注意,我假设你的父视图是线性布局。如果不是,那么你需要使用它的layoutparams。


4
LayoutParams 的构造函数接受另一个 LayoutParams 对象,而你也刚好在那里创建了该对象?这让我有点困惑。在这种情况下,您只能创建一个对象吗? - The Unknown Dev

1

Kotlin答案

这个问题的原因(很可能)是你刚刚创建了它,但还没有在屏幕上呈现出来。不过,你可以自己设置它。

val width = LayoutParams.WRAP_CONTENT // or LayoutParams.MATCH_PARENT
val height = (context.)resources.getDimension(R.dimen.my_size)

view.layoutParams = LinearLayout.LayoutParams(width, height)

请确保将LinearLayout更改为您要添加的任何布局。


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