安卓ImageView的setPadding方法没有效果

6
我正在尝试设置 ImageView 的内边距。以下是我的代码。
private void createEpisodeView() {
    float scale = this.getResources().getDisplayMetrics().density;
    int padding = (int) (PADDING * scale + 0.5f);

    rlItemsRoot = (LinearLayout) findViewById(R.id.rl_items_root);

    for (int i = 0; i < GameLevels.TOTAL_EPISODES; i++) {
        ImageView iv = new ImageView(this);

        iv.setPadding(padding, padding, padding, padding);          
        iv.setBackgroundResource(R.drawable.icon_small);

        rlItemsRoot.addView(iv);
    }

}

但是它没有任何效果。但是当我在XML中设置它时,它看起来很好。

当我们动态设置填充时,默认情况下以像素为单位表示。在 XML 中,您是否使用相同的 px 或 dip 值? - Arpit Garg
我正在使用XML中的dip,并将像素转换为DIP。常数5用于取消转换为int的影响,即0.7在int中为0,但如果加上0.5,则不会。 - AZ_
2个回答

13
你可能已经注意到,你正在使用以下技术:

iv.setBackgroundResource(R.drawable.icon_small);

这将为ImageView设置背景。背景图像将填充整个视图,因为它在视图中所有内容的后面。

使用

iv.setImageResource(R.drawable.icon_small);

而不是。


1
谢谢,我很高兴不需要在ImageView周围加入不必要的LinearLayout包装来获取填充! - JoonasS

4

与其设置

iv.setBackgroundResource(R.drawable.icon_small);

设置

iv.setImageResource(R.drawable.icon_small);

问题解决了 :)

如果有人知道原因,请回复。


2
当设置背景时,您的填充会丢失。您必须在设置背景之后而不是之前调用setPadding(..)方法。这在setBackgroundDrawable(..)的文档中已经指出,但谷歌没有在setBackgroundResource(..)的文档中提到。 - j__m

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