在Android中禁用后退按钮


334

注销应用程序时如何在android中禁用后退按钮?


1
您能否更清楚地知道这个问题?如果要覆盖后退按钮的默认行为,请在此处参考此问题。stackoverflow.com/questions/2000102/…–
Gopinath

26
除非您有充分的理由,否则请不要这样做,因为破坏预期的运营模式会严重损害整个平台
Hamy 2011年

14
如果您必须处理一个笨拙的Samsung S4,该三星的S4后退按钮在手机边缘上是触敏的(不是物理的),它已经非常触敏,以致手掌靠在侧面回去。
大蒜人2014年

1
它违反了Android质量和设计指南 UX-N1的角色。
MiguelSlv

Answers:


651

覆盖onBackPressed方法,如果要处理设备上的后退按钮,则什么也不做。

@Override
public void onBackPressed() {
   if (shouldAllowBack()) {
       super.onBackPressed();
   } else {
       doSomething();
   }
}

12
这比覆盖关键的处理方法更好,更干净,并且具有相同的效果。好答案!
Nik Reiman

2
伟大的解决方案伙计。有什么办法可以使用主页按钮执行此操作?
Datta Kunde

1
这很棒!实际上,当我从任何其他活动回退时,我总是想返回到我的主要活动,而重写此方法使我可以很轻松地做到这一点。
吉姆(Jim)

糟糕,我忘记删除了super.onBackPressed()。
亚里斯·迈克尔

173

如果正在寻找更高的api级别2.0和更高,这将很好

@Override
public void onBackPressed() {
    // Do Here what ever you want do on back press;
}

如果正在寻找Android api级别最高为1.6。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
     return true;
     }
     return super.onKeyDown(keyCode, event);    
}

在您的活动中编写以上代码,以防止按下后退按钮


5
由于onbackpressed的api级别要求,此方法比使用onbackpressed更向后兼容
AndrewPK 2011年

5
好答案。尽管我的项目不需要它,但我感谢您提供了新旧方法。这应该标记为正确答案。+1
吉姆(Jim)

1
@Javanator,第二个对我不起作用(例如,对于API级别16),但是第一个对我来说却像一个魅力
noloman 2013年

38

您可以通过以下简单方法进行操作:不要调用super.onBackPressed()

注意:-除非有充分的理由,否则请不要这样做。

@Override
public void onBackPressed() {
// super.onBackPressed();
// Not calling **super**, disables back button in current screen.
}

6
关于“为什么不”的解释会很好。谢谢。
几乎是初学者

不调用.super很重要!

3
@almostabeginner,因为不调用super将使后退按钮的正常使用无效。当正常工作的按钮停止工作时,用户会感到恐惧。他们可能会认为该应用有故障或手机出现故障等。您的应用最终将是罪魁祸首。
bengongon97 '19


13

我正在使用.............

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK)
        Toast.makeText(getApplicationContext(), "back press",      
     Toast.LENGTH_LONG).show();

    return false;
       // Disable back button..............
}

9

如果您想确保在Activity被杀死之前从某个服务器注销了android客户端应用程序->在其自己的线程上退出服务(无论如何,这是您应该做的)。

禁用后退按钮将无法为您解决任何问题。例如,当用户接到电话时,您仍然会遇到相同的问题。接到电话后,您的活动在从网络中获得可靠答案之前被杀死的机会就差不多。

这就是为什么您应该让服务在其自己的线程上等待网络的答案,然后如果服务未成功,请使其重试。android服务不仅在返回答案之前被杀死的可能性要小得多,而且在完成工作之前真的被杀死了,AlarmManager总是可以将其恢复以重试。


8

只需重写onBackPressed()方法,而无需调用onBackPressed方法的超类或其他方法。

@Override
public void onBackPressed()
{

}

或将当前活动传递到onBackPressed()方法中。

@Override
public void onBackPressed()
{
   startActivity(new Intent(this, myActivity.class));  
   finish();
}

将您的必需活动名称替换为myActivity。

如果您使用片段,则首先调用callParentMethod()方法

public void callParentMethod(){
    context.onBackPressed(); // instead of context use getActivity or something related
}

然后调用空方法

@Override
public void onBackPressed()
{

}

6

如果您正在使用FragmentActivity。然后像这样

首先在您的内部调用此功能Fragment

public void callParentMethod(){
    getActivity().onBackPressed();
}

然后onBackPressed在父FragmentActivity类旁边调用方法。

@Override
public void onBackPressed() {
  //super.onBackPressed();
  //create a dialog to ask yes no question whether or not the user wants to exit
  ...
}

5

只需使用以下代码:如果要禁用backpress,请不要使用super.OnBackPressed();。

@Override
public void onBackPressed() {

}

4

如果要在注销时禁用应用程序,则可以弹出一个不可取消的对话框。


4

您可以onBackPressed()在活动中覆盖该方法,并删除对超类的调用。

@Override
public void onBackPressed() {
  //remove call to the super class
  //super.onBackPressed();
}

3

您只需要覆盖后退按钮的方法即可。您可以根据需要将方法保留为空,以便在按“后退”按钮时什么也不会发生。请看下面的代码:

@Override
public void onBackPressed() 
{
   // Your Code Here. Leave empty if you want nothing to happen on back press.
}

3

除了以上答案之外,还提供了这两种方法。

onBackPressed()(API级别5,Android 2.0)

onKeyDown()(API级别1,Android 1.0)

您也可以像这样覆盖dispatchKeyEvent()(API Level 1,Android 1.0)

dispatchKeyEvent() (API级别1,Android 1.0)

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    // TODO Auto-generated method stub
    if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
        return true;
    }
    return super.dispatchKeyEvent(event);
}

3

在Android中禁用后退按钮

@Override
public void onBackPressed() {
    return;
}

2

对我来说,覆写onBackPressed()是行不通的,但是明确指出应该开始的活动是行得通的:

@Override
public void onBackPressed(){
  Intent intent = new Intent(this, ActivityYouWanToGoBack.class);
  startActivity(intent);
}


1

除去super.onBackPressed()public void onBackPressed()工大。其在android 9中测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.