androidback鍵監聽
A. android 在fragment中怎麼監聽返回鍵,home鍵
android 在fragment中如何監聽返回鍵,home鍵
在activity中用keydown很容易實現對返回鍵的監聽,但是這個函數不能再fragment中重載。
通過我嘔心瀝血的尋找,終於找到了解決辦法,對其他物理按鍵的監聽也同理。
public class phonerecorder extends Fragment {
View listview;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
listview = (View) inflater.inflate(R.layout.phonerecorder, null);
mListView = (ListView) listview.findViewById(R.id.listView);
init();
mListView.setOnItemClickListener(clickitemlistener);
listview.setFocusable(true);//這個和下面的這個命令必須要設置了,才能監聽back事件。
listview.setFocusableInTouchMode(true);
listview.setOnKeyListener(backlistener);
return listview;
}
private View.OnKeyListener backlistener = new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (i == KeyEvent.KEYCODE_BACK) { //表示按返回鍵 時的操作
if (!rootpatch.equals(currentfilepach) && currentfilepach != null) {
File file = new File(currentfilepach);
openDir2(file.getParent().toString());
currentfilepach = file.getParent().toString();
return true;
} //後退
return false; //已處理
}
}
return false;
}
};
}
B. android 中怎麼監聽按鍵的長按事件
現在手機物理按鍵越來越少
常見的有 KEYCODE_VOLUME_DOWN/UP KEYCODE_POWER KEYCODE_BACK KEYCODE_HOME KEYCODE_MENU
在一個activity 重載父類 的下面這三個方法來處理按鍵事件
public boolean onKeyDown(int keyCode, KeyEvent event)
public boolean onKeyUp(int keyCode, KeyEvent event)
public boolean onKeyLongPress(int keyCode, KeyEvent event)
很明顯,長按事件一般是放到 onKeyLongPress 函數中來處理的。
C. android 中按下返回鍵銷毀activity的詳細調用過程。 求大神解答。
java"> @Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.ACTION_DOWN){
MainActivity.this.finish();
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
這個是按返回鍵就會銷毀activity,雙擊銷毀是判斷你雙擊的點擊事件間隔時間
小於300ms就銷毀activity的
D. android檢測返回鍵onBackPressed和onKeyDown區別
本篇文章介紹如何在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鍵可以通過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) {
處理上面這樣的方法,onOptionsMenuClosed()方法也可以實現。
@Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
Toast.makeText(this, "onOptionsMenuClosed clicked", Toast.LENGTH_SHORT)
.show();
}
經過筆者的測試,發生這些方法在高版本中可能出現不兼容的情況,關於菜單可以查看 Android中Menu菜單
原文地址: https://www.cnblogs.com/HDK2016/p/8695052.html#a1