尝试设置相对布局的背景图像

Trying to set a background image of a relativelayout

我正在尝试将背景可绘制图像设置为我拥有的相对布局。我正在使用 setBackground 并且它要求可绘制而不是 int。我可以给它一个可绘制对象,它仍然给我一个错误。这是我的代码的一部分。

rl.setBackground(R.drawable.loginbackground3);

这是我遇到的错误。

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

很迷茫请帮忙?

您需要使用该可绘制对象引用加载可绘制对象。

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

请注意,如果您使用的是支持库,则可以像这样解决 getDrawable 的弃用问题:

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

试试这个:

rl.setBackgroundResource(R.drawable.loginbackground3);

或者如果你想在这种情况下像你那样做,你需要检查构建版本(如果你正在构建较低版本的)。

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));
}

//假设你的布局命名为relativelayout1:

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

由于 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);