【Android】Android實現監聽返回鍵,主鍵(HOME),菜單鍵


目錄結構:

contents structure [+]

一.簡介

本篇文章介紹如何在Android中實現監聽返回鍵,主鍵,菜單鍵。一般情況下,我們都可以在Android手機底部看到三個按鈕,這三個按鈕就分別是返回鍵,主鍵,菜單鍵。

接下來介紹監聽這三個鍵的實現。

二.監聽 返回鍵

第一種方法通過onBackPressed()方法來實現

    /**  
     * 注意:  
     * super.onBackPressed()會自動調用finish()方法,關閉當前Activity.  
     */    
    @Override    
    public void onBackPressed() {    
        super.onBackPressed();    
        Toast.makeText(this, "按下了back鍵   onBackPressed()", Toast.LENGTH_SHORT).show();
    }

onBackPressed()提供的功能有限,它這是在退出之前通知onBackPressed()方法,並不能改變用戶原來的行為

利用onKeyDown方法,就可以實現

    @Override    
    public boolean onKeyDown(int keyCode, KeyEvent event) {    
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {    
            Toast.makeText(this, "按下了back鍵   onKeyDown()", Toast.LENGTH_SHORT).show();
             return false;    
        }else {    
            return super.onKeyDown(keyCode, event);    
        }    
    }  

onKeyDown方法返回true表示退出,返回false便不退出。

還可以通過跳轉來實現退出,

   @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
               Intent intent = new Intent(Intent.ACTION_MAIN);  
               intent.addCategory(Intent.CATEGORY_HOME);  
               startActivity(intent);
        }
        return super.onKeyDown(keyCode, event);
    }

通過onKeyDown我們可以實現,實現“再按一次返回鍵退出程序”的功能

private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){   
        if((System.currentTimeMillis()-exitTime) > 2000){  
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                                
            exitTime = System.currentTimeMillis();   
        } else {
            finish();
            System.exit(0);
        }
        return true;   
    }
    return super.onKeyDown(keyCode, event);
}

三.監聽 主鍵(Home鍵)

監聽Home鍵可以通過onUserLeaveHint()方法來實現,

    @Override 
    protected void onUserLeaveHint() { 
        super.onUserLeaveHint(); 
        Toast.makeText(this, "onUserLeaveHint", Toast.LENGTH_SHORT).show();
    }

在這個方法中,我們可以觀察出,如果onUserLeaveHint方法是不能改變用戶的行為的。

四.監聽 菜單鍵

在手機下方的三個鍵中,最右邊的鍵就是菜單鍵,通常是用方括號表示的。經過筆者的測試發現,如果輕點一下,那么會跳出菜單界面,如果長點的話,那么會退出程序。這個過程會自動調用onUserLeaveHint方法,也就是主鍵。

菜單的監聽也可以通過onKeyDown()方法來實現

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_MENU) {
            Toast.makeText(this, "onkeyDown clicked", Toast.LENGTH_SHORT)
                    .show();
            super.openOptionsMenu(); // 調用這個,就可以彈出菜單
        }
        return true; // 最后,一定要做完以后返回 true,或者在彈出菜單后返回true,其他鍵返回super,讓其他鍵默認
    }

處理上面這樣的方法,onOptionsMenuClosed()方法也可以實現。

    @Override
    public void onOptionsMenuClosed(Menu menu) {
        super.onOptionsMenuClosed(menu);
        Toast.makeText(this, "onOptionsMenuClosed clicked", Toast.LENGTH_SHORT)
        .show();
    }

經過筆者的測試,發生這些方法在高版本中可能出現不兼容的情況,關於菜單可以查看 Android中Menu菜單

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM