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

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

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

此代码不起作用...

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

我该怎么做?

【问题讨论】:

    标签: android layout imageview


    【解决方案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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-29
        • 1970-01-01
        相关资源
        最近更新 更多