一、简介
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"