Button的使用总结

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) {
                //这里不写事件
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值