如何为ImageView设置setLayoutParams()?

80

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

我只能在API文档中找到各种ViewGroups的相关信息,而没有ImageView的相关资料。然而,ImageView似乎具有此功能。

这段代码不起作用...

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

我该如何做呢?

5个回答

169

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

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

这是因为需要知道为视图分配什么大小的是包含该视图的父级视图。


3
你知道吗...你所说的方法可行。但我已经掌握了那个概念,只是犯了一个大错误。你看,我把我的ImageViews放在了TableLayout中...所以我使用了TableLayout.setLayoutParams。但它会崩溃。当我更深入地思考时,我需要向下转到TableRow.setLayoutParams才能最终解决问题。感谢你让我的大脑运转起来。"is sitting in"这个说法启发了我...必须把这些东西讲得简单明了一些。 - DeadTime
22
很高兴我能够帮助你。如果你的问题已经解决了,你可以将这个回答标记为“采纳”。它是文本左侧的勾号标记。 - Steve Haley
嗨@SteveHaley,这里的宽度和高度参数是以像素为单位的,对吧?我的经验表明是这样的,但在这里却毫无头绪:http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html#LinearLayout.LayoutParams(int, int) - ericn
2
@fuzzybee 我认为这是以像素为单位的... 大多数在代码中设置的布局都是像素而不是 DP。 通过使用类似 TypedValue.applyDimension(TypedValue.ComplexUnit_DP, 30, getResources().getDisplayMetrics()) 这样的东西将像素转换为 DP。 - 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);

13

如果您要更改现有 ImageView 的布局,只需获取当前的 LayoutParams,更改宽度/高度,然后将其设置回去即可:

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

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


需要再次使用 myImageView.setLayoutParams(layoutParams); 分配 LayoutParams 吗?由于您修改了 LayoutParams 的引用,因此不需要。 - Vince

6
一个ImageView从View中获取setLayoutParams,它使用ViewGroup.LayoutParams。如果你使用这个方法,在大多数情况下会导致崩溃,因此你应该使用在View.class中的getLayoutParams()方法。这将继承ImageView的父View并始终起作用。你可以在此处确认:ImageView扩展了view 假设你有一个定义为' image_view '和宽度/高度int定义为'thumb_size'的ImageView。
最好的方法是:
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);

0
为了不丢失其余的参数,您需要按照下面所示的方式进行操作:
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.checked, null);    
preview.setImageDrawable(drawable);
ViewGroup.LayoutParams layoutParams = preview.getLayoutParams();
layoutParams.width = 100;
layoutParams.height = 98;
preview.setLayoutParams(layoutParams);

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