如何为 ImageView 设置LayoutParams()?

Posted

技术标签:

【中文标题】如何为 ImageView 设置LayoutParams()?【英文标题】:How do you setLayoutParams() for an ImageView? 【发布时间】:2011-02-27 06:48:04 【问题描述】:

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

我只能在 API 中找到各种 ViewGroups 的文档,而不是 ImageView。然而ImageView 似乎有这个功能。

此代码不起作用...

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

我该怎么做?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

你知道......你说的很有效。但我已经掌握了这个概念,但却犯了一个大错误。你看我在 TableLayout 中有我的 ImageViews...所以我使用的是 TableLayout.setLayoutParams。但它会崩溃。当我更深入地思考它时,我需要深入到 TableRow.setLayoutParams 以使其最终工作。谢谢你让我的大脑工作。 “坐在里面”为我触发了它……我得把这玩意儿搞砸了。 很高兴能帮上忙。如果您的问题得到解决,您能否将此标记为已接受的答案?它是文本左侧的刻度线。 嗨@SteveHaley,这里的宽度和高度参数是像素对吗?我的经验表明,这里的空白令人震惊:developer.android.com/reference/android/widget/…, int) @fuzzybee 我认为它是以像素为单位的......在代码中设置的大多数布局内容都是像素而不是 DP。使用 TypedValue.applyDimension(TypedValue.ComplexUnit_DP, 30, getResources().getDisplayMetrics()) 之类的东西将像素转换为 DP【参考方案2】:

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

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);

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

是否有必要用 myImageView.setLayoutParams(layoutParams); 再次分配 LayoutParams ?由于您修改了对 LayoutParams 的引用,因此不应该这样做。【参考方案4】:

ImageView 从使用 ViewGroup.LayoutParams 的 View 获取 setLayoutParams。如果你使用它,它在大多数情况下会崩溃,所以你应该使用 View.class 中的 getLayoutParams()。这将继承 ImageView 的父视图并始终有效。你可以在这里确认:ImageView extends view

假设您将 ImageView 定义为 'image_view' 并将宽度/高度 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);

【讨论】:

以上是关于如何为 ImageView 设置LayoutParams()?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 TapGesture 识别器设置框架

如何为 ImageView 赋予六边形形状

iOS UIImageView如何为圆形ImageView添加填充

如何为 UITableViews 裁剪 cell.imageview.image 中的图像?

如何为不同的屏幕尺寸android studio自动调整imageview的大小?

如何为多个屏幕设置从左到右和反转的动画师