Ⅰ android雙擊返回鍵退出為什麼又重新啟動
一、實現思路:
用戶按下返回鍵時設定一個定時器來監控是否2秒內實現了退出,如果用戶沒有接著按返回鍵,則清除第一次按返回鍵的效果,使程序還原到第一次按下返回鍵之前的狀態。定時器是每次用戶按下返回鍵才去創建。
二、功能代碼:
?
/**
* 菜單、返回鍵響應
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK)
{
exitBy2Click(); //調用雙擊退出函數
}
return false;
}
/**
* 雙擊退出函數
*/
private static Boolean isExit = false;
private void exitBy2Click() {
Timer tExit = null;
if (isExit == false) {
isExit = true; // 准備退出
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
tExit = new Timer();
tExit.schele(new TimerTask() {
@Override
public void run() {
isExit = false; // 取消退出
}
}, 2000); // 如果2秒鍾內沒有按下返回鍵,則啟動定時器取消掉剛才執行的任務
} else {
finish();
System.exit(0);
}
}
Ⅱ android,怎麼判斷最後一個activity,退出程序給提示
android,判斷最後一個activity可以用以下方法:
在Activity的方法中, 有一個方法isTaskRoot()方法, 這個方法可以判宴知斷當前Activity是否是最後一個Activity, 如果是, 用戶再按一次返回就退出當前應用, 否則回到瞎告上一個仍然活動的Activity。具體的操作步驟如下:
1、為每個Activity創建晌神消基類BaseActivity,使得每個Activity都是繼承於基本的BaseActivity的。
2、復寫BaseActivity的finish方法,在方法中調用isTaskRoot()判斷是否是最後一個Activity,如果是給出提示。
以下給出相關重要部分代碼:
publicclass BaseActivity extends Activity{
@Override
public void finish() {
super.finish();
if(isTaskRoot()){
Toast.makeText(this,"已經退出程序",Toast.LENGTH_LONG).show();
}
}
}
Ⅲ onBackPressed,onKeyDown和onKeyUp這三個事件的區別
首先,來解釋一下這三個事件。
onKeyDown:是當某個按鍵被按下是觸發。所以也有人塵族在點擊返回鍵的時候去執行該方法來做判斷。(該方法只是android 1.0~ android 2.1)薯顫
捕獲判斷代碼數兄敗:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同時沒有重復
Toast.makeText(ml78.this,"返回鍵Back鍵測試",1).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
onKeyUp:這個方法是當某個按鍵被按下後,抬起的時候執行,其實跟onKeyDown沒什麼差別
onBackPressed:在android 2.0開始多出了關於返回鍵的單獨的事件方法,可以在該方法裡面執行當點擊返回鍵的時候做什麼...所以,後期都是用這個方法比較多。
如果要考慮版本兼容的話,代碼可這么寫:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否觸發按鍵為back鍵
if (keyCode == KeyEvent.KEYCODE_BACK) {
onBackPressed();
return true;
} else {// 如果不是back鍵正常響應
return super.onKeyDown(keyCode, event);
}
}
點擊兩次返回鍵退出,防止誤操作
//退出時間
= 0;
//退出間隔
privatestaticfinalintBACK_PRESSED_INTERVAL= 2000;
//重寫onBackPressed()方法,繼承自退出的方法
@Override
publicvoidonBackPressed() {
//判斷時間間隔
if(System.currentTimeMillis()-currentBackPressedTime>BACK_PRESSED_INTERVAL) {
currentBackPressedTime= System.currentTimeMillis();
Toast.makeText(this,"再按一次返回鍵退出程序", Toast.LENGTH_SHORT).show();
}else{
//退出
finish();
}
}
Ⅳ Android slidemenu 左滑菜單框架怎麼監聽菜單項的點擊事件
package com.qm.test;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu.CanvasTransformer;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Interpolator;
import android.widget.TextView;
import android.widget.Toast;
/*
* 主頁麵包裝菜單、返回動畫、退出事件的包裝類
*/
public class ListActivityMode extends SlidingFragmentActivity {
private CanvasTransformer mTransformer;
private SlidingMenu sm;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSlidingMenu(this);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
/*
* 當主頁面不可見時關閉菜單
* @see android.support.v4.app.FragmentActivity#onStop()
*/
@Override
protected void onStop() {
// TODO Auto-generated method stub
if(sm.isMenuShowing()){
sm.toggle();
}
super.onStop();
}
private long exitTime = 0;
/*
* 雙擊返回歲或按鈕退出
* @see android.support.v4.app.FragmentActivity#onKeyDown(int, android.view.KeyEvent)
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_BACK == keyCode) {
// 判斷是否在兩秒之內連續點擊返回鍵,是則退出,否則不雹物退出
if (System.currentTimeMillis() - exitTime > 2000) {
Toast.makeText(getApplicationContext(), "再按一次退出程乎肆伍序",
Toast.LENGTH_SHORT).show();
// 將系統當前的時間賦值給exitTime
exitTime = System.currentTimeMillis();
} else {
finish();
System.exit(0);
}
return true;
}
return super.onKeyDown(keyCode, event);
}
/*
* 菜單初始化程序
* @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
toggle();
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* 初始化滑動菜單
*/
public void initSlidingMenu(SlidingFragmentActivity activity) {
//初始化動畫效果
initAnimation(activity);
// 設置主界面視圖
// activity.setContentView(R.layout.activity_main);
// 設置滑動菜單視圖
activity.setBehindContentView(R.layout.menu_frame);
activity.getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame, new SampleListFragment()).commit();
// 設置滑動菜單的屬性值
sm = activity.getSlidingMenu();
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setShadowDrawable(R.drawable.shadow);
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
sm.setFadeDegree(0.35f);
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
sm.setBehindScrollScale(0.0f);
sm.setBehindCanvasTransformer(mTransformer);
activity.setSlidingActionBarEnabled(true);
}
private Interpolator interp = new Interpolator() {
@Override
public float getInterpolation(float t) {
t -= 1.0f;
return t * t * t + 1.0f;
}
};
/**
* 初始化動畫效果
*/
private void initAnimation(SlidingFragmentActivity activity) {
mTransformer = new CanvasTransformer() {
@Override
public void transformCanvas(Canvas canvas, float percentOpen) {
canvas.translate(0, canvas.getHeight() * (1 - interp.getInterpolation(percentOpen)));
}
};
}
}
Ⅳ java.lang.RuntimeException: Unable to start activity ComponentInfo
Android?
ViewmyWidget=findViewById(R.id.xxx);
myWidget.setXXXX;//如果上面沒有找到該Widget,那麼接下來如果有此類操作,就會拋空指針
所以你看看你在聲明Widget的地方,找找所對應的資源文件裡面,是否ID都一致了,資源文件是否引用對了
Ⅵ android回退鍵不觸發onkeydown事件
回退鍵應該是調用Activity里的onBackPressed方法,你找錯地方了。
Ⅶ android,onKeyUp(int keyCode, KeyEvent event) {...return true ;是什麼意思
首先說明return true ,是告訴系統按鍵時間已經在我這里解決了,其他的地方就不高指差用再處理了,我已經把事件消耗了。
你放出的代戚皮碼的意逗枯思是,第一次點擊返回按鈕,不返回,我只是記錄你的按下按下時間,第二次按下的時候,我比較上次點擊是否大於2秒了,如果在2秒內,我就退出了。(大概就是2秒內連續點擊兩次才退出應用,開發中經常用到)
Ⅷ android中如何添加連按兩次退出鍵退出程序
原理就是計算兩次按下的時間間隔,數值你可以自己設定,間隔小於定攜芹隱的數值則認為是辯廳連續按首攔下的兩次,此時退出
private long mExitTime;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - mExitTime) > 800) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mExitTime = System.currentTimeMillis();
} else {
finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
Ⅸ 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
Ⅹ 實現android 再按一次退出程序代碼
private
long
exitTime
=
0;
/**
*
捕捉返回事件按鈕
*
*
因為此
Activity
繼承
TabActivity
用
onKeyDown
無響應,所以知碰改用
dispatchKeyEvent
*
一般的
Activity
用
onKeyDown
就可以搭仔談了
*/
@Override
public
boolean
dispatchKeyEvent(KeyEvent
event)
{
if
(event.getKeyCode()
==
KeyEvent.KEYCODE_BACK)
{
if
(event.getAction()
==
KeyEvent.ACTION_DOWN
&&
event.getRepeatCount()
==
0)
{
this.exitApp();
}
return
true;
}
return
super.dispatchKeyEvent(event);
}
/**
*
退出程序
*/
private
void
exitApp()
{
//
判斷2次點擊事件時間戚螞
if
((System.currentTimeMillis()
-
exitTime)
>
2000)
{
Toast.makeText(MainActivity.this,
"再按一次退出程序",
Toast.LENGTH_SHORT).show();
exitTime
=
System.currentTimeMillis();
}
else
{
finish();
}
}