一、简介
Button控件继承TextView,拥有TextView的属性。StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点<selector >,只需要将Button的background属性设置为该app/res/drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景。
二、Button 属性
- 代码常用属性
| 属性 | 含义 |
| setClickable(boolean clickable) | 设置按钮是否允许点击。clickable=true:允许点击。clickable=false:禁止点击 |
| setBackgroundResource(int resid) | 通过资源文件设置背景色。resid:资源xml 文件 ID。按钮默认背景为:android.R.drawable.btn_default |
| setOnClickListener(OnClickListener l) | 设置按钮点击事件 |
| 继承属性支持 | TextView 属性 同样支持,就不列举了。 |
xml常用属性
| 属性 | 含义 |
| onClick | 设置按钮点击事件 |
| 继承属性支持 | TextView 属性 同样支持,就不列举了。 |
三、selector 使用
- Android Button 设置 android:background="@drawable/xxx" 无效解决方案
selector跟shape使用方式差不多,需要在app/res/drawable文件夹下新建.xml文件并进行配置。selector常用属性
| 属性 | 含义 |
| drawable | 正常按钮的一个背景颜色或图片,可以配置多种状态下的显示 |
| state_focused | 是否获得焦点 |
| state_window_focused | 是否获得窗口焦点 |
| state_enabled | 控件是否可用 |
| state_checkable | 控件可否被勾选 |
| state_checked | 控件是否被勾选 |
| state_selected | 控件是否被选择,针对有滚轮的情况 |
| state_pressed | 控件是否被按下 |
| state_active | 控件是否处于活动状态 |
| state_single | 控件包含多个子控件时,确定是否只显示一个子控件 |
| state_first | 控件包含多个子控件时,确定第一个子控件是否处于显示状态 |
| state_middle | 控件包含多个子控件时,确定中间一个子控件是否处于显示状态 |
| state_last | 控件包含多个子控件时,确定最后一个子控件是否处于显示状态 |
四、结合以上写的案例
app/res/drawable中新建一个btn_bg.xml文件进行配置
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/dzm1" android:state_pressed="true" /> <item android:drawable="@color/dzm2" android:state_enabled="false" /> <item android:drawable="@color/dzm3" /> </selector>
xml布局中使用
<Button android:id="@+id/dzm" android:layout_width="match_parent" android:layout_height="50dp" android:text="按钮" android:background="@drawable/btn_bg"/>
- 效果
- 代码 - 点击事件
Button btn = (Button)findViewById(R.id.dzm); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 点击事件 } });
xml- 点击事件
android:onClick="doClick"

