【问题标题】:Set margins and other layout properties of ImageView programmatically以编程方式设置 ImageView 的边距和其他布局属性
【发布时间】:2020-08-27 08:39:09
【问题描述】:

我正在尝试以编程方式将一些图像添加到 LinearLayout。

图片的xml如下:

<ImageView
    android:id="@+id/iv_card27"
    android:layout_width="50dp"
    android:layout_height="match_parent"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:scaleType="centerInside"
    app:srcCompat="@drawable/back" />

这是我已经尝试过的java代码:

ImageView card = new ImageView(this);

card.getLayoutParams().width = 50;
card.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
card.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
card.setImageResource(R.drawable.back);

bottomRow.addView(card);

但是我一直在努力添加边距,而且我担心我设置为 50 的宽度。但它实际上应该是 50dp。我怎样才能做到这一点?

【问题讨论】:

  • 我会通过布局充气器充气 xml 布局。这要容易得多。如果这样做,您可以稍后在 xml 文件中而不是在代码中编辑布局。但是,如果您明确想要以编程方式进行更改,则可以这样做。 Illya Bublyk 的回答完全正确......
  • 嗯,我认为这是最好的方法。我似乎无法复制我使用带有编码的设计器设计的布局。谢谢!
  • 没问题。如果您需要进一步的帮助,请查看这个 SO 问题https://stackoverflow.com/q/2335813/9610875

标签: android android-layout android-imageview


【解决方案1】:

您必须使用特定代码来安排边距:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(xxx,xxx,xxx,xxx);
card.setLayoutParams(params);

【讨论】:

    【解决方案2】:

    您可以使用 ViewGroup.MarginLayoutParams 、RelativeLayout.LayoutParams 或 LinearLayout.LayoutParams 设置布局边距。

    LayoutParams params = new LayoutParams(
                LayoutParams.WRAP_CONTENT,      
                LayoutParams.WRAP_CONTENT);
    params.setMargins(left, top, right, bottom);
    card.setLayoutParams(params);
    

    https://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams

    【讨论】:

      【解决方案3】:

      为您的 ImageView 设置边距:

      MarginLayoutParams marginParams = new MarginLayoutParams(image.getLayoutParams());
      marginParams.setMargins(left_margin, top_margin, right_margin, bottom_margin);
      RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
      
      card.setLayoutParams(layoutParams);
      

      【讨论】:

        猜你喜欢
        • 2016-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2013-06-14
        • 2016-02-24
        • 1970-01-01
        相关资源
        最近更新 更多