Android Button四种点击事件和长按事件

项目XML代码

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     android:orientation="vertical"
 8     tools:context=".MainActivity">
 9 
10     <Button
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:layout_marginTop="10dp"
14         android:onClick="doClick"
15         android:text="xml添加doClock"/>
16 
17     <Button
18         android:id="@+id/button2"
19         android:layout_width="match_parent"
20         android:layout_height="wrap_content"
21         android:layout_marginTop="10dp"
22         android:text="匿名内部类点击"/>
23 
24     <Button
25         android:id="@+id/button3"
26         android:layout_width="match_parent"
27         android:layout_height="wrap_content"
28         android:layout_marginTop="10dp"
29         android:text="自定义点击事件"/>
30 
31     <Button
32         android:id="@+id/button4"
33         android:layout_width="match_parent"
34         android:layout_height="wrap_content"
35         android:layout_marginTop="10dp"
36         android:text="继承方式"/>
37 
38     <Button
39         android:id="@+id/button5"
40         android:layout_width="match_parent"
41         android:layout_height="wrap_content"
42         android:layout_marginTop="10dp"
43         android:text="长按点击事件"/>
44 
45 </LinearLayout>

 

JAVA代码:

 1 package com.example.a11658.buttondemo;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 import android.widget.Toast;
 8 
 9 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
10     Button button2, button3, button4, button5;
11 
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16 
17         initView();
18     }
19 
20     private void initView() {
21         button2 = findViewById(R.id.button2);
22         button3 = findViewById(R.id.button3);
23         button4 = findViewById(R.id.button4);
24         button5 = findViewById(R.id.button5);
25 
26         button2.setOnClickListener(new View.OnClickListener() {
27             @Override
28             public void onClick(View v) {
29                 //匿名内部类实现点击事件
30                 Toast.makeText(MainActivity.this, "匿名内部类的点击事件", Toast.LENGTH_SHORT).show();
31             }
32         });
33 
34         button3.setOnClickListener(new MyListener());
35         button4.setOnClickListener(this);
36         button5.setOnLongClickListener(new View.OnLongClickListener() {
37             @Override
38             public boolean onLongClick(View v) {
39                 Toast.makeText(MainActivity.this, "长按事件", Toast.LENGTH_SHORT).show();
40                 return false;
41             }
42         });
43     }
44 
45     public void doClick(View view) {
46         //xml通过onClick实现点击事件
47         Toast.makeText(this, "xml点击实现", Toast.LENGTH_SHORT).show();
48     }
49 
50     @Override
51     public void onClick(View v) {
52         //继承方式
53         Toast.makeText(this, "继承点击", Toast.LENGTH_SHORT).show();
54     }
55 
56     class MyListener implements View.OnClickListener {
57 
58         @Override
59         public void onClick(View v) {
60             //自定义方式
61             Toast.makeText(MainActivity.this, "自定义点击事件", Toast.LENGTH_SHORT).show();
62         }
63     }
64 }
备注:Button数量不多的情况下推荐使用第二种,匿名内部类的方式实现;反之则推荐使用第四种,Activity继承View.OnClickListener实现

代码链接:https://pan.baidu.com/s/1hlkrcybgMUrS2rrslnDwGg

转载于:https://www.cnblogs.com/MrChen-/p/10303288.html

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,焦点事件事件是两个不同的概念,但它们有时可以组合使用来实现特定的交互行为。焦点事件(FocusChangeEvent)通常发生在用户点击或触摸某个控件使其获得焦点时,而事件(LongClickEvent)则发生在用户对某个控件持续按下一段时间。 如果你想让一个控件在用户按时触发焦点事件,你不能直接将焦点事件处理程序与事件关联起来。然而,你可以利用`OnTouchListener`或`View.OnFocusChangeListener`结合`MotionEvent.ACTION_DOWN`(表示开始按压)和`MotionEvent.ACTION_UP`(表示释放)来模拟按效果,并在按期间执行相应的焦点操作。 以下是一个简单的例子: ```java Button myButton = findViewById(R.id.my_button); myButton.setOnTouchListener(new View.OnTouchListener() { private long pressStartTime; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: pressStartTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: if ((System.currentTimeMillis() - pressStartTime) > MIN_LONG_PRESS_TIME) { // 触发焦点事件或执行相关操作 v.requestFocus(); // 或者 v.performClick(); } break; default: return false; } return true; } }); ``` 在这个例子中,`MIN_LONG_PRESS_TIME`是一个设定的阈值(如500毫秒),如果用户按住时间超过这个阈值,就会触发焦点事件。请注意,这只是一个基本的示例,实际应用可能需要更复杂的逻辑来处理不同情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值