2017-01-16 70 views
0

我想設置一個背景可繪製圖像到我有的相關佈局。我正在使用setBackground,它要求drawable不是int。我可以給它一個drawable,它仍然給我一個錯誤。這裏是我的代碼的一部分。試圖設置一個相關佈局的背景圖像

rl.setBackground(R.drawable.loginbackground3); 

這是我得到的錯誤。

setBackground (android.graphics.drawable.Drawable) in View cannot be applied to (int). 

很困惑,請幫助?

回答

1

試試這個就像你的情況一樣,你需要檢查構建版本(如果你正在爲較低版本構建)。

final int sdk = android.os.Build.VERSION.SDK_INT; 
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    rl.setBackgroundDrawable(getResources().getDrawable(R.drawable.loginbackground3)); 
} else { 
    rl.setBackground(getResources().getDrawable(R.drawable.loginbackground3)); 
} 
+0

我使用rl.setBackgroundResource(R.drawable.loginbackground3)嘗試;我沒有得到任何錯誤,但它不起作用。什麼都沒發生。背景不會改變 –

1

您需要使用該可繪製參考加載drawable。

Drawable background = rl.getContext().getResources().getDrawable(R.drawable.loginbackground3); 
rl.setBackground(background); 

請注意,如果您使用的支持庫就可以解決getDrawable的,像這樣的棄用:如果你想要做

rl.setBackgroundResource(R.drawable.loginbackground3); 

或:

Drawable background = ContextCompat.getDrawable(rl.getContext(), R.drawable.loginbackground3); 
rl.setBackground(background); 
+0

即時得到上線一個錯誤:。可繪製背景= rl.getContext()getResources()getDrawable(R.drawable.loginbackground3); 錯誤是:android.content.Context android.widget.RelativeLayout.getContext()」上的空對象引用 –

0

//假設你的佈局被命名爲relativelayout1:

RelativeLayout r1 = (RelativeLayout) findViewById(R.id.relativelayout1); 
r1.setBackgroundResource(R.drawable.sample); 
0

因爲從自身的Android庫不一致, 首先,你需要創建方法getDrawable:

private Drawable getDrawable(int id) { 
    final int sdk = android.os.Build.VERSION.SDK_INT; 
    if (sdk >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
    return ContextCompat.getDrawable(getContext(), id); 
    } else { 
    return getContext().getResources().getDrawable(id); 
    } 
} 

然後,創建方法setBackgroundView:

private void setBackgroundView(View v, int drawable_Rid) { 
    Drawable background = getDrawable(drawable_Rid); 
    final int sdk = android.os.Build.VERSION.SDK_INT; 
    if (sdk >= android.os.Build.VERSION_CODES.JELLY_BEAN) { 
    v.setBackground(background); 
    } else { 
    v.setBackgroundDrawable(background); 
    } 
} 

最後調用這樣與抽拉名稱setBackgroundView:

setBackgroundView(rl, R.drawable.loginbackground3);