如何在Android中以编程方式设置后台绘图

要设置背景,请执行以下操作:

RelativeLayout布局=(RelativeLayout)findViewById(R.id.background);
布局.立根资源(R.可绘制.准备就绪);

最好的方法是什么

layout.setBackgroundResource(R.drawable.ready)正确。
实现这一目标的另一种方法是使用以下方法:

final int sdk=android.os.Build.VERSION.sdk\u int;
if(sdk<android.os.Build.VERSION\u code.JELLY\u BEAN){
layout.setBackgroundDrawable(ContextCompat.getDrawable(context,R.drawable.ready));
}否则{
layout.setBackground(ContextCompat.getDrawable(context,R.drawable.ready));
}

但我认为出现问题是因为您试图加载大图像。
这里是一个如何加载大型位图的好教程。

更新:
API级别22中不推荐使用getDrawable(int)

getDrawable(int)现在在API级别22中不推荐使用。
您应该改用支持库中的以下代码:

ContextCompat.getDrawable(context,R.drawable.ready)

如果您参考ContextCompat.getDrawable,它为您提供如下内容:

/**
*返回与特定资源ID关联的可绘制对象。
*<p>
*从{@link android.os.Build.VERSION_CODES#LOLLIPOP}开始,返回
*drawable将为指定上下文的主题设置样式。
*
*@param id由aapt工具生成的所需资源标识符。
*这个整数对包、类型和资源条目进行编码。
*值0是无效的标识符。
*@return Drawable可用于绘制此资源的对象。
*/
公共静态最终可绘制getDrawable(上下文,int-id){
最终int版本=Build.version.SDK\u int;
如果(版本>=21){
返回contextcompatipapi21.getDrawable(context,id);
}否则{
返回context.getResources().getDrawable(id);
}
}

有关ContextCompat

从API 22开始,您应该使用getDrawable(int,Theme)方法而不是getDrawable(int)

更新:
如果您使用的是support v4库,那么以下内容对于所有版本都足够了

ContextCompat.getDrawable(context,R.drawable.ready)

您需要在应用程序build.gradle中添加以下内容

编译'com.android.support:support-v4:23.0.0'#或以上任何版本

或在任何API中使用ResourceCompat,如下所示:

导入android.support.v4.content.res.ResourcesCompat;
ResourcesCompat.getDrawable(getResources(),R.drawable.name\u of\u drawable,null);

发表评论