| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 移动开发 -> Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity -> 正文阅读 |
|
|
[移动开发]Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity |
一、在xml 中设置按键的onClick 绑定的函数新建一个工程
?然后在相关的页面添加一个Button
?运行一下
实际上,现在这个按键一,我们去运行的时候,他是没有任何的反馈的,我们按完它,他没有任何的反馈,那我如何才能让他出现一些反馈呢? 我们用?????????android:onClick="buttonBeCliecked"
? ? ? ? ? ? ? ? 我们设置了这个函数,这个函数是java 写的 ,当按键被按下的时候,就会调用java里面的??buttonBeCliecked? 这个函数,那么调用哪个java文件呢?? ? ? ? MainActivity.java ? ? ? ? 因为MainActivity.java 在?setContentView这面去跟??activity_main 产生关联 ????????也就是说.xml文件绑定的所有函数都在.java文件里面去找
这段没什么用? ?@Override
?你要找的话,你要去实现? 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 下面观察? ? ? "按键一被按下"? ? “按键二被按下”? ? 是不是有点土呀
? ??
,写个this 就行 ,因为这面就一个类MainActivity ,这个this 指向MainActivity ? ? ? ? ??
,比如??????????"按键一被按下" ? ? ? ? ??
,默认时长就可以了 ? ? ? ? ? ?? 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也得加,必须加
? ? ? ? ????????????????????????????????????????????????? ????????????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 二、按键相应第二种方式,接口类????????????????????????????????????????????????????????????????????????
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(); ?理论上需要这样搞的
?但是你new 出来的Button和我这个页面上的Button 是同一个东西嘛?
?那么如何将.java里面的Button 和 .xml 里 通过Id找组件? ? ?,让.xml和我局部变量Button 产生联系 ? ? ? ? ????btn1 = (Button)findViewById(R.id.button1);
?运行一下,可以了 ,没有崩溃
我们自定义 的类实现了接口????????OnClickListener 同时有一个????????setOnClickListener? 这个函数为按键????????btn1? ? 添加点击事件 不要忘记了? 你局部的Button 和 .xml 里面的button产生联系 总结:2、自定义类实现按键监听事件的接口 ? ? ? ? ? ? 2.1绑定? 局部变量 button 和xml 中的button ,? findViewByld ? ? ? ? ? ?2.2 实现接口类,在类中实现onclicked 方法,写业务代码 ? ? ? ? ? ?2.3 为1,2两部做的准备进行绑定。使得按键被按下后执行你写的业务代码? ? ? ? 局部变量: ????????Button btn1; 绑定.xml? ? :? ?? 设置监听器: ????????btn1.setOnClickListener(new MyclieckHandler()); ? ? ? 设置监听器之前你要自己实现一个类: class MyclieckHandler implements View.OnClickListener (这个类实现了OnClickListener这样的一个接口) 三、按键响应的第三种方式匿名内部类复制一下 上一个工程
?匿名内部类如何实现呢? 首先里面两个button 绑定,都要一样
只不过 ????????btn1.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
现在的代码
|
|
|
| 移动开发 最新文章 |
| Vue3装载axios和element-ui |
| android adb cmd |
| 【xcode】Xcode常用快捷键与技巧 |
| Android开发中的线程池使用 |
| Java 和 Android 的 Base64 |
| Android 测试文字编码格式 |
| 微信小程序支付 |
| 安卓权限记录 |
| 知乎之自动养号 |
| 【Android Jetpack】DataStore |
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年11日历 | -2025/11/30 11:21:15- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |