1.如果同时为Button设置点击事件和长按事件,如果不想在触发长按事件的时候同时触发点击事件的话,那长按事件的返回值必须为true,将点击事件拦截。
btnSend.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
btnSend.setText("被点击");
return true;
}
});
2.如果想要监听Button的按下和弹起事件,需要用到onTouchListener。
btnSend.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
btnSend.setText("已经按下按钮");
}
if (event.getAction() == KeyEvent.ACTION_UP) {
btnSend.setText("按钮已经弹起");
}
return true;// 返回true的话,单击事件、长按事件不可以被触发
// return false;
}
});
3.如果要为Button设置一个边框,并有一个圆角效果,那么可以为其设置一下drawable,实现如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!--边框的颜色以及粗细-->
<stroke android:color="#000000"
android:width="0.5dp" />
<!--圆角的半径 也可以一个 一个定义-->
<corners android:radius="2dp" />
</shape>
4.为Button同时设置单击和双击事件。单击事件时候,会改变背景,松开时,会恢复成原来的背景;双击的时候,可以跳转到具体的页面去。(同时也适用于TextView,只要为将属性clickable设置为true)。
(1)为Button设置drawable
bg_btn.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/bg_clicked" />
<item android:state_pressed="false" android:drawable="@drawable/bg_normal" />
</selector>
bg_normal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#D0D0D0" />
<corners android:radius="5dp" />
</shape>
bg_clicked.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#D0D033" />
<corners android:radius="5dp" />
</shape>
(2)实现View.onTouchListener接口,重写onTouch
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 如果第二次点击 距离第一次点击时间过长 那么将第二次点击看为第一次点击
if (firstClick != 0 && System.currentTimeMillis() - firstClick > 300) {
count = 0;
}
count++;
if (count == 1) {
firstClick = System.currentTimeMillis();
} else if (count == 2) {
lastClick = System.currentTimeMillis();
// 两次点击小于300ms 也就是连续点击
if (lastClick - firstClick < 300) {// 判断是否是执行了双击事件
Toast.makeText(MainActivity.this,"双击事件被触发",Toast.LENGTH_SHORT).show();
}
}
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return false; //为true将拦截Click事件,LongClick事件
}
(3)同时设置点击事件和双击事件
btn.setOnTouchListener(this);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//这里不写事件
}
});