日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/4/5 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android:按键响应方式第一种onClick属性,第二种方法接口类,第三种方式匿名内部类,第四种方式Activity 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、在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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。