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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自定义Button,复写里面的onKeyDown,不起作用

發(fā)布時間:2023/12/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义Button,复写里面的onKeyDown,不起作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

李剛的Android瘋狂講義真是“瘋狂”,浪費了3天時間,到底是他的代碼有問題,還是怎么的不得而知。

問題描述:他的書里面第3.3基于回調事件處理Propagation的例程。是為了演示基于回調事件傳播的例程序,源代碼如下: MyButton.java
  • publicclassMyButtonextendsButton {publicMyButton(Context context ,AttributeSet set){super(context , set);}@Overridepublicboolean onKeyDown(int keyCode,KeyEvent event){super.onKeyDown(keyCode , event);Log.v("-MyButton-","the onKeyDown in MyButton");//返回false,表明并未完全處理該事件,該事件依然向外擴散return false;} }
  • Propagation.java
  • publicclassPropagationextendsActivity { @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyButton bn =(MyButton)findViewById(R.id.bn); //bn.setFocusable(true); bn.requestFocus(); bn.setFocusableInTouchMode(true); //為bn綁定事件監(jiān)聽器 bn.setOnKeyListener(newOnKeyListener() {@Overridepublicboolean onKey(View source,int keyCode,KeyEvent event){//只處理按下鍵的事件if(event.getAction()==KeyEvent.ACTION_DOWN){Log.v("-Listener-","the onKeyDown in Listener");}// 返回false,表明該事件會向外傳播return false;} }); }
  • //重寫onKeyDown方法,該方法可監(jiān)聽它所包含的所有組件的按鍵被按下事件
  • @Override publicboolean onKeyDown(int keyCode,KeyEvent event) {super.onKeyDown(keyCode , event);Log.v("-Activity-","the onKeyDown in Activity");//返回false,表明并未完全處理該事件,該事件依然向外擴散return false; }
  • ? ??MyButton繼承了Button,并重寫了onKeyDown方法,這個方法是在控件有焦點的情況下,當組件上按下某個按鍵觸發(fā)該方法,這點很重要, 類似的還有OnkeyUp和OnKeyPress。這里涉及到一個焦點問題。 ? ??那么什么是焦點問題:焦點可以理解為我們正在操作的對象,焦點在這里,就可操作。實際上這個MyButton是在Activity中的,我們程序默 認運行的時候焦點在Activity上,這就造成里面的MyButton無法操作,我是這么理解的,呵呵。所以程序要加兩行的是:
    ? ??這里是不用setFocusable而用requstFocuns的原因是前者是設置是否允許此控件有獲得焦點的能力,后者是請求獲得焦點,一個是設置屬性 ,另一個是執(zhí)行動作,故我們用后者,setFocunsableInTouchMode是獲得焦點的方式,我們是觸摸的時候獲得焦點。設置好了之后,焦點定位 在了該Button上,當單擊模擬器任意按鍵的時候,有程序是LogCat正確輸出。 ? ??本程序是為了演示:如果有任何一個事件處理方法返回了true,該事件還會繼承向外傳播。我不理解的書中”先把焦點移動到程序界面的按鈕上“是幾個意思,困惑了好長時間。 ?

    ?

    轉載于:https://www.cnblogs.com/fruitbolgs/p/4160862.html

    總結

    以上是生活随笔為你收集整理的自定义Button,复写里面的onKeyDown,不起作用的全部內容,希望文章能夠幫你解決所遇到的問題。

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