一、在xml 中设置按键的onClick 绑定的函数

新建一个工程

然后在相关的页面添加一个Button

运行一下

实际上,现在这个按键一,我们去运行的时候,他是没有任何的反馈的,我们按完它,他没有任何的反馈,那我如何才能让他出现一些反馈呢?

我们用         android:onClick="buttonBeCliecked"

我们设置了这个函数,这个函数是java 写的 ,当按键被按下的时候,就会调用java里面的  buttonBeCliecked  这个函数,那么调用哪个java文件呢?        MainActivity.java

因为MainActivity.java 在 setContentView这面去跟  activity_main 产生关联

也就是说.xml文件绑定的所有函数都在.java文件里面去找

这段没什么用

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    就先删掉

你要找的话,你要去实现  buttonBeCliecked   这个函数

这个函数需要一个权限        public

,public的目的是扩大这个函数       buttonBeCliecked    的可见度

我们涉及到函数的分装,权限这一块

然后他需要一个参数View  v,这就是它整个参数的原型

view  V不认识,按下ctrl   +shirt  +  o

这样我们就可以当用户按下这个按键的时候,去调这个函数 public void buttonBeCliecked(View v)

但这个函数我们什么都没做

那我们给他加一句        System.out.println("button1 clicked");

运行一下

我们按一下button1,他会显示        button1 clicked  ,但是我们在哪里看呢?

看这个log Cat,logCat 这边会显示非常多的安卓模拟器的信息

如果消息过多的话,我不想看,就可做一个过滤,

,没看到任何的过滤,说明这个过滤器有时候没那么好用

这面还可以选择,你是要看整个操作系统的,还是这个包里面的

那比如我们现在又有一个按键,(拖个按键进来)

改一下名字

我的按键二也可以指定一个onClick事件,当按键二被按下的时候,我也可以同样调用

public void buttonBeCliecked(View v)        这个函数

运行一下

无论我按,按键一,还是按键二 ,他都显示      button1 clicked

那我如何区分是    一     还是     二    被按下呢?

我们用     System.out.println(v.getId());   看看两个按键的id

这样通过id 就能区分,既然通过id 就能区分,我们能不能定义一个id ,或者直接switch

运行一下

发现id反了,我们给他修改一下

然后这个时候我们再把r.java 删掉,在让他重新自动生成

(我们说gen  自动生成帮你维护这个权限的)

运行一下

我们在logcat 下面观察      "按键一被按下"    “按键二被按下”    是不是有点土呀

介绍一个类        Toast.makeText(context, text, duration)   

                           这是一个构造方法,最后会产生一个对象

context:        上下文的意思 

,写个this 就行 ,因为这面就一个类MainActivity ,这个this 指向MainActivity

text:        需要显示的内容

,比如          "按键一被按下"

duration:        显示的时长

,默认时长就可以了

Toast.makeText(this, "按键一被按下", 0);

然后.show()         去显示

Toast.makeText(this, "按键一被按下", 0).show();

运行一下

整体的画面

补充:

有时候把函数名写错了        第17行加个s

然后我们运行一下,程序崩溃了

然后legcat有一个错误提示,一大堆红色的

我们看到第三行就可以了,这面有一个 Could not find a method buttonBeCliecked(View) in the activity class

你按键被按下的时候.xml会去找,找哪个函数?        找 buttonBeCliecked

他说       Could not find a method buttonBeCliecked   因为我把名字写错了

那 如果我们看不到      logCat    怎么办呢?

找到这里

然后找到  Android

找到logCat,就可以了

然后我们试着把    public  删掉

运行一下 ,发现程序还是崩溃

那如果我们的void 改成int 呢?        第17行

然后加上第31行

运行一下,这样是可以的

但是,建议还是public  void  加上函数名

View v也得加,必须加

  二、按键相应第二种方式,接口类

关于监听器:监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v))。

Android提供的基于事件监听接口有

OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。

      

1)OnClickListener接口:该接口处理的是点击事件。在触摸模式下,是在某个View上按下并抬起的组合动作,而在键盘模式下,是某个View获得焦点后点击确定键或者按下轨迹球事件。

2)OnLongClickListener接口: OnLongClickListener接口与上述的OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件。

3)OnFocusChangeListener接口:OnFocusChangeListener接口用来处理控件焦点发生改变的事件。如果注册了该接口,当某个控件失去焦点或者获得焦点时都会触发该接口中的回调方法。

4)OnKeyListener接口:是对手机键盘进行监听的接口,通过对某个View注册并监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。

5)OnTouchListener接口:是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。

6)OnCreateContextMenuListener接口:是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式

                                                                            
我们复制一下,然后新建一个工程

然后我们在src 下面的MainActivity.java

做一个类          class MyclieckHandler implements View.OnClickListener

然后去     implements   这个接口

接口的话,就要实现里面的抽象方法

那这个方法怎么做?argo  我们改成v,这个形参的名字随便你

onClick的做法就是

它处理的业务都是一样的,只是走的流程不一样

你写在这里的话,发现makeText不管用,因为他是一个        OnClickListener

因为makeText  必须和        MainActivity  产生一些关系

那先给他注释掉

那我们如何用MyclieckHandler 呢?

现在给一个button btn1();

他不认识,然后ctrl  +shirt  +o

点开第三行

然后我们加上

btn1.setOnClickListener(new MyclieckHandler());

然后我们在.xml 里面需要去掉

android:onClick="buttonBeCliecked"

android:onClick="buttonBeCliecked"

这两句话,因为这是第一种方法的

在.java里面        有些代码可以删掉的

现在的代码   .java 下面的

.xml下面的

我们运行一下,发现程序直接崩了

发现是空指针异常,这个btn1  和 btn2  你可以理解为c语言的野指针

你真的想用btn1 之前 你需要new 的

btn1 = new Button();
                    btn2 = new Button();

理论上需要这样搞的

但是你new 出来的Button和我这个页面上的Button 是同一个东西嘛?

那么如何将.java里面的Button 和 .xml 里

通过Id找组件     ,让.xml和我局部变量Button 产生联系

btn1 = (Button)findViewById(R.id.button1);
            btn2 = (Button)findViewById(R.id.button2);

运行一下,可以了 ,没有崩溃

我们自定义 的类实现了接口        OnClickListener

同时有一个        setOnClickListener  这个函数为按键        btn1    添加点击事件

不要忘记了  你局部的Button 和 .xml 里面的button产生联系

总结:

2、自定义类实现按键监听事件的接口

            2.1绑定  局部变量 button 和xml 中的button ,  findViewByld

           2.2 实现接口类,在类中实现onclicked 方法,写业务代码

           2.3 为1,2两部做的准备进行绑定。使得按键被按下后执行你写的业务代码   

局部变量:

Button btn1;
    Button btn2;

绑定.xml    :    
            btn1 = (Button) findViewById(R.id.button1);
            btn2 = (Button) findViewById(R.id.button2);

设置监听器:

btn1.setOnClickListener(new MyclieckHandler());
            btn2.setOnClickListener(new MyclieckHandler());

设置监听器之前你要自己实现一个类:

class MyclieckHandler implements View.OnClickListener

(这个类实现了OnClickListener这样的一个接口)

三、按键响应的第三种方式匿名内部类

复制一下 上一个工程

匿名内部类如何实现呢?

首先里面两个button 绑定,都要一样

btn1 = (Button) findViewById(R.id.button1);
            btn2 = (Button) findViewById(R.id.button2);

只不过

btn1.setOnClickListener(new MyclieckHandler());
            btn2.setOnClickListener(new MyclieckHandler());

没有自己的        MyclieckHandler          而是去直接new 一个        View.OnClickListener

你  New一个接口的时候就会产生匿名内部类了,你要为这个内部类实现里面的抽象接口

这面就不要用switch    case    id    了,因为  是一一绑定的

btn1  绑定            OnClickListener()

public void onClick(View arg0)  这个View 就是but1 自己

btn1当被按下的时候,就显示        System.out.println("按键一被按下");

也可以显示弹窗         Toast.makeText(this, "按键一被按下", 0).show()

因为Toast.makeText 在        onCreate 下面

因为        Toast.makeText(this, "按键一被按下", 0).show();        在        MainActivity下面

所以        Toast.makeText(MainActivity.this, "按键一被按下", 0).show();

同样你想做btn2,完整的代码

显得很麻烦,因为他要为每一个按键做这些事

因为是匿名内部类,导致每一次用它的时候,都要现场建这个类,去实现里面的接口

四、按键响应的第四种方式,Activity

通过Activty 为整个Activity 设置监听事件

copy上一个工程

这两个东西是使用了 匿名内部类的方式

删掉

我要让整个Activty去重写

public class MainActivity extends Activity implements View.OnClickListener

同样的要去重写里面的方法

你的主控件        MainActivity,继承了       Activity ,同时他去重写了      OnClickListener这个接口

对页面来说,具备了检测按键按下的功能

你页面里面的主键要单独设置,    把你Activty 里面有的,对按键监听的功能设置给btn1

btn1.setOnClickListener(this);

加上

btn2.setOnClickListener(this);

按键就含有了,按下被响应的功能

同样的public void onClick(View arg0)   改成  public void onClick(View v)

剩下的东西,跟我们自定义类里面一摸一样

记得把argo  改成 v

现在的代码

Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity相关推荐

  1. Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期

    按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...

  2. Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局

    实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...

  3. 我的面试标准:第一能干活,第二Java基础要好,第三最好熟悉些分布式框架!...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer www.cnblogs.com/J ...

  4. Oracle的启动与停止(三个启动阶段和四种停库模式)

                                      Oracle的启动与停止(三个启动阶段和四种停库模式) 大家都知道Oracle数据库支持各种平台,比较常用的平台是windows8和 ...

  5. 美食类短视频如何定位?分享四种类型,选对适合的方向很重要

    美食类短视频如何定位?分享四种类型,选对适合的方向很重要 人人都是"干饭人",所以美食类短视频从来都是不会缺少粉丝的.但是这并不说明做美食类短视频的小伙伴们可以随心所欲的做内容,比 ...

  6. 1、第一列为姓名,第二列为语文成绩,第三列为数学成绩,编写一个程序,实现(1)按要求创建这样的文件 (2)读取文件中的信息并输出以下结果: ①分别求这个班数学和语文的平均分(保留1位小数)并输出

    3. 创建一个文件,内容如下: 林虹 95 98 张天天 85 85 朱莉 56 36 李乐乐 87 85 第一列为姓名,第二列为语文成绩,第三列为数学成绩,编写一个程序,实现: (1)按要求创建这样 ...

  7. 封装详解,private,修改私有属性get/set方法,类和对象总结

    方法,属性,有参与无参构造函数,对私有属性private的访问get/set方法都在类中:在我们的项目中只有一个实现类main,在main中将类实例化为对象,通过对象来调用类中的方法,属性,有参与无参 ...

  8. footer属性css,CSS基础-footer元素始终粘在浏览器底部的四种方法

    本文介绍底部footer元素如何始终粘在浏览器底部.当内容container足够多.可以撑开一屏的时候,底部footer紧跟在内容container后边:而内容container不够多.不足以撑开一屏 ...

  9. jq onclick 定义_从HTML中的onClick属性调用jQuery方法

    我在整个系统中实现JQuery是比较新的,我正在享受这个机会. 我遇到一个问题,我想找到正确的决心. 以下是我想做的一个简单案例: 我在页面上有一个按钮,在点击事件我想调用一个我定义的jquery函数 ...

最新文章

  1. 反arp攻击软件_谈谈电子欺骗中的ARP欺骗
  2. 『PaddlePaddle X Wechaty』有颜又有才的Living_Bot
  3. Blend学习(2) 从对象创建控件
  4. 【官方教程】Ubuntu 安装 mongoDB
  5. 华为5g鸿蒙麒麟,华为5G亮王牌:鸿蒙系统+7800W+麒麟990+防水,钱包按耐不住!
  6. [转] 丢了自己,要记得找回了~~我们80后的那些忧伤
  7. java导出excel锁定状态_填报表导出excel后不可写的单元格处于锁定状态
  8. 计算机装系统找不到硬盘分区,系统安装找不到现有分区,小编教你如何解决系统安装找不到现有分区...
  9. Selenium使用自带浏览器自动化
  10. 乐高大颗粒作品24:金蟾
  11. showdown解析markDown的使用方法
  12. 空间,是一首精美华丽的诗篇
  13. 如何学会记账,并分别统计每个月收入和支出的金额
  14. DB2数据库的简单使用
  15. 4种大文件传输工具和软件,用于共享大文件
  16. 【Uva 10118】Free Candies
  17. scum重新设置服务器无响应,人渣SCUM疑难问题解决办法 人渣SCUM常见问题解答_游侠网...
  18. ESP8266(基于arduino平台)每篇一个知识点——2.wifi AP模式设置
  19. java节假日算法_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...
  20. 软件系统非功能测试方法,软件测试 非功能测试

热门文章

  1. 二、制作最小linux系统
  2. 计算机网络·用户代理和浏览器 发送邮件分别需要的协议
  3. Mac 勿扰模式周期性开关闭功能实现脚本
  4. Ubuntu使用ssh公钥实现免密码登录
  5. 【前端积累】点击切换显示内容
  6. Hive 和普通关系数据库的异同
  7. Error:(108) No resource identifier found for attribute #39;style#39; in package #39;android#39;
  8. Windows8 正式版最简单的去除桌面水印方法
  9. CRM脱机下使用说明_海天
  10. 我的NHibernate之路(1)---基本配置篇