试图设置relativelayout的背景图像

时间:2017-01-16 05:03:08

标签: java android background relativelayout drawable

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

rl.setBackground(R.drawable.loginbackground3);

这是我遇到的错误。

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

非常困惑请帮帮忙?

4 个答案:

答案 0 :(得分:1)

您需要使用该drawable引用加载drawable。

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

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

//假设您的布局名为relativelayout1:

public void intervalPost(View view) {
  try {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://requestb.in/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    PostInterface service = retrofit
      .create(PostInterface.class);
      .postTime(time2)
      .enqueue(new Callback<Response>() {
                @Override
                public void onResponse(Call<Response> call, Response<Response> response) {
                  // code here
                }

                @Override
                public void onFailure(Call<Response> call, Throwable t) {
                  // code here
                }
            });
  } catch (IOException Ex) {
  }
}

答案 3 :(得分: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);