这是我参与「第四届青训营 」笔记创作活动的第2天
安卓基础 —— 按钮控件
按钮类
Button
继承自TextView, 仅可以显示文字的按钮 Button是TextView的子类, 这意味着它基本包含TextView的相关属性和方法.
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
ImageButton
继承自ImageView, 仅可以显示图片的按钮
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
android:contentDescription="@string/button_icon_desc"
... />
按钮响应点击事件
以Button类举例
法一——定义onClick属性
Button的onClick属性值是是为了响应点击事件而调用的方法的名称, 在Activity中必须实现该方法 如
<Button
android:id="@+id/button"
android:text="@string/app_name"
android:layout_width="200dp"
android:layout_height="100dp"
android:onClick="MyClick"
/>
按钮被点击后会自动调用方法
public void MyClick(View view) {
//do something
}
Button的onClick绑定的方法必须满足如下条件
public- 返回值类型为
void - 将
View指定为其唯一的参数(这将是被点击的View)
法二——设置Listener
在Activity中为按钮设置监听器(非标准翻译), 监听器检测到对应的点击事件后会自动执行相关代码
监听器也分为好几种
ClickListener
检测按钮的点击事件(以按钮被松开为标志) 设置ClickListener的代码
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something
}
});
setOnClickListener这个方法需要传入一个OnClickListener接口的实现对象, 一般我们以多态的形式直接实现它. 以下的Listener也类似
LongClickListener
顾名思义, 该监听器检测长按事件, 标志为按下按钮且一小段时间没有松开
button.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
// do something
return false;
}
});
返回值的含义是长按是否消费当前动作, 当动作被消费, 动作将不再被检测到. 例如返回值为true时, 长按按钮后松开, 只有LongClick做出反应, 因为LongClick反应后消费了此动作, "松开"也就不能在被Click检测到.
TouchListener
检测触摸事件, 有三个动作会触发触摸事件
- DOWN, 手指摸到了屏幕, 且要是按钮区域内开始摸到
- MOVE, 滑动
- UP, 手指离开屏幕
button.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
//do something
return false;
}
});
返回值与LongClick类似, Touch的down动作总是先于LongClick和Click被检测到, 所以如这里返回true, LongClick和Click均不能再处理此事件