Android button.setBackground

Posted

技术标签:

【中文标题】Android button.setBackground【英文标题】: 【发布时间】:2014-10-26 00:05:41 【问题描述】:

我想为按钮设置背景。使用android 4.1.2 一切正常,但如果使用Android 4.0 启动,我会遇到错误

java.lang.NoSuchMethodError: android.widget.Button.setBackground 

有代码

LayerDrawable composite = new LayerDrawable(layers);
button.setBackground(composite);

那么如何设置LayerDrawable 背景但使用Android 4.0 或更早?

【问题讨论】:

***.com/questions/18559248/… 创建xml层并为你的按钮设置它 button.setBackgroundDrawable(getResources().getDrawable(R.drawable.layer)); (setBackground 来自 api 级别 16) 【参考方案1】:

试试这个...

if(Build.VERSION.SDK < Build.VERSION_CODES.ICE_CREAM_SANDWICH)
     LayerDrawable composite = new LayerDrawable(layers);
     button.setBackgroundDrawable(composite);
else
     LayerDrawable composite = new LayerDrawable(layers);
     button.setBackground(composite);

setBackground drawable 接收作为参数(可绘制背景)...

希望能帮到你……

【讨论】:

【参考方案2】:

setBackground 方法仅适用于 API 级别 16 或以上。您可能正在使用低于 16 的 API 级别的方法,这就是它抛出 NoSuchMethodError 的原因。对于较低的 API 版本,您可能想尝试 setBackgroundDrawable。这样的事情会做:

if(Build.VERSION.SDK < Build.VERSION_CODES.JELLY_BEAN)
     LayerDrawable composite = new LayerDrawable(layers);
     button.setBackgroundDrawable(composite);
else
     LayerDrawable composite = new LayerDrawable(layers);
     button.setBackground(composite);

【讨论】:

@DenisKotenko 很高兴知道这一点!不要忘记将此答案标记为正确:)【参考方案3】:

虽然以上两个答案都很接近,但您应该真正使用

Build.VERSION.SDK_INT

由于Build.VERSION.SDK返回一个字符串,并且一直是deprecated since API 4

if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
         LayerDrawable composite = new LayerDrawable(layers);
         button.setBackgroundDrawable(composite);
else
         LayerDrawable composite = new LayerDrawable(layers);
         button.setBackground(composite);

【讨论】:

以上是关于Android button.setBackground的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

android 21 是啥版本

Android逆向-Android基础逆向(2-2)

【Android笔记】android Toast

图解Android - Android核心机制

Android游戏开发大全的目录