如何为ImageView设置setLayoutParams()?


77

我想设置LayoutParams一个,ImageView但似乎找不到正确的方法。

我只能在API中找到有关各种文档ViewGroups,但不能找到ImageView。但是ImageView似乎具有此功能。

该代码不起作用...

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30));

我该怎么做?

Answers:


167

您需要设置ImageView所在的ViewGroup的LayoutParams。例如,如果您的ImageView在LinearLayout内,则创建一个

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

这是因为它是View的父级,需要知道要分配给View的大小。


2
你知道...你所说的有效。但是我已经掌握了这个概念,但是犯了一个大错误。您会看到我的ImageViews在TableLayout中...因此我正在使用TableLayout.setLayoutParams。但这会崩溃。当我对它进行更深入的考虑时,我需要深入研究TableRow.setLayoutParams才能使其最终起作用。感谢您使我的大脑工作。“坐着”对我来说触发了它。
DeadTime 2010年

21
很高兴能为您提供帮助。如果您的问题得到解决,可以将其标记为已接受的答案吗?这是文本左侧的刻度线。
史蒂夫·哈利

@SteveHaley,您好,这里的width和height参数以像素为单位吗?我的经验表明,这里令人震惊地空白:developer.android.com/reference/android/widget/…,int
ericn

2
@fuzzybee我认为它以像素为单位...代码中设置的大多数布局内容都是像素而不是DP。使用类似TypedValue.applyDimension(TypedValue.ComplexUnit_DP, 30, getResources().getDisplayMetrics())
Steve Haley的

19

旧线程,但我现在有同样的问题。如果有人遇到此问题,他可能会找到以下答案:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

仅当将ImageView作为子视图添加到LinearLayout时,此方法才有效。如果将其添加到RelativeLayout中,则需要调用:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);

12

如果要更改现有ImageView的布局,则应该能够简单地获取当前的LayoutParams,更改宽度/高度,然后再将其设置回:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams();
layoutParams.width = 30;
layoutParams.height = 30;
myImageView.setLayoutParams(layoutParams);

我不知道这是否是您的目标,但如果是,那可能是最简单的解决方案。


是否需要重新分配LayoutParams myImageView.setLayoutParams(layoutParams);?由于您修改了对LayoutParams的引用,因此不应这样做。
文斯

6

ImageView从使用ViewGroup.LayoutParams的View获取setLayoutParams。如果使用它,在大多数情况下它将崩溃,因此您应该使用View.class中的getLayoutParams()。这将继承ImageView的父视图,并将始终运行。您可以在此处确认:ImageView扩展视图

假设您将ImageView定义为“ image_view ”,并将width / height int定义为“ thumb_size”

最好的方法是

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams();
iv_params_b.height = thumb_size;
iv_params_b.width = thumb_size;
image_view.setLayoutParams(iv_params_b);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.