2011-10-10 94 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完成。感謝您的更正:-) –