2011-10-10 96 views
5

我想设置一个ImageView的填充。我的代码是android ImageView setPadding没有效果

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中设置它看起来很好。

+0

当我们动态设置填充时,填充是默认表示的像素。在xml中使用相同的值在px或dip –

+0

我在XML中使用dip,在这里我将pix转换为DIP。而5常量是取消转换为int的效果。即int中的0.7是0,但如果你加0.5,那么它不会。 –

回答

14

一个你注意到自己使用的是

iv.setBackgroundResource(R.drawable.icon_small); 

这将设置为ImageView的背景。背景图片将填充整个视图,因为它位于视图中的所有内容之后。

使用

iv.setImageResource(R.drawable.icon_small); 

代替。

+0

伟大的thnx ..... –

+0

+1不错的概念。 –

+1

谢谢,我很高兴我不需要在imageview周围做不必要的linearlayout包装来获得填充! – JoonasS

4

比设置,而

iv.setBackgroundResource(R.drawable.icon_small); 

设置

iv.setImageResource(R.drawable.icon_small); 

和问题解决:)

,如果任何机构都知道的原因,请回复。

+2

设置背景时,填充会丢失。在设置背景之后,你不得不'setPadding(..)',而不是之前。这在'setBackgroundDrawable(..)'的文档中指出,但Google忽略了'setBackgroundResource(..)'的提及。 –

+1

接受他人的回答也是一个好主意 –

+1

@HamzehSoboh完成。感谢您的更正:-) –