如何为 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()?的主要内容,如果未能解决你的问题,请参考以下文章
iOS UIImageView如何为圆形ImageView添加填充
如何为 UITableViews 裁剪 cell.imageview.image 中的图像?