Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果布尔值为真,则覆盖“主页”和“返回”按钮_Android_Button_Overriding_Back Button - Fatal编程技术网

Android 如果布尔值为真,则覆盖“主页”和“返回”按钮

Android 如果布尔值为真,则覆盖“主页”和“返回”按钮,android,button,overriding,back-button,Android,Button,Overriding,Back Button,我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作。通常这些按钮应该像往常一样做出反应,但在某种情况下,某些设置是真的,我想覆盖这些按钮,让它们调用我自己的方法 我使用这两种方法覆盖这些按钮: @Override public void onBackPressed() { // call my backbutton pressed method when boolean==true } @Override public void onAttache

我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作。通常这些按钮应该像往常一样做出反应,但在某种情况下,某些设置是真的,我想覆盖这些按钮,让它们调用我自己的方法

我使用这两种方法覆盖这些按钮:

  @Override
  public void onBackPressed() {    
  // call my backbutton pressed method when boolean==true
    }

  @Override
  public void onAttachedToWindow()    {                                                                                       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);    
   super.onAttachedToWindow(); 
   // call my homebutton pressed method when boolean==true
   }

不,你不能。您可以做的是验证该方法并管理其中的布尔值:

例如:

 public void onBackPressed() {    // call my backbutton pressed method when boolean==true

      if (myCondition) {
          // take care of my needs
       } else 
            // call super to let the back behavior be "normal"

  }

使布尔变量成为成员变量

boolean temp;

@Override
        public void onBackPressed() {    // call my backbutton pressed method when boolean==true

if(temp)
//your methode
else
finish();
            }

关于覆盖主页按钮的行为

但是,如果你的应用程序是一个特定的应用程序,并且目标受众有限,比如跨组织应用程序、医院信息亭、餐馆点菜,你可以尝试将你的应用程序设置为主页(启动器应用程序)。你可以在这里找到一个很好的例子:

为了覆盖back key事件,这里有很多例子

例如:


  • 您可以调用super.onBackPressed()来调用普通方法。 例如:

    @Override
    public void onBackPressed() {    
        if (activated) {
           //doyourthing
        } else {
           super.onBackPressed()
        }
    }
    
    我用这个:

    public void onBackPressed() {
    
            switch (screen) {
            case 1:
                screen = 99;
                setContentView(R.layout.menu);
                break;
    
            case 99:
                finish();
                break;
    
            }
            return;
        }
    
    当我在另一个屏幕(除菜单屏幕外)时,我将变量屏幕设置为1。 当我按下后退按钮时,它会返回菜单屏幕(而不是关闭应用程序)。 并给屏幕变量99号,然后当你再次点击后退按钮时,它将关闭应用程序

    但是,您无法更改“主页”按钮

    我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作

    是的,您可以覆盖
    Home
    按钮

    我已经开发了一个应用程序,可以禁用硬按钮,大家可以看看。 我使用了一个切换按钮,除了电源按钮外,它将所有硬按钮锁定在工作状态

    public class DisableHardButton extends Activity {
        /** Called when the activity is first created. */
        TextView mTextView;
        ToggleButton mToggleButton;
        boolean isLock=false;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mTextView=(TextView) findViewById(R.id.tvInfo);
            mToggleButton=(ToggleButton) findViewById(R.id.btnLock);
    
    
            mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                isLock=isChecked;
                onAttachedToWindow();
            }
        });
       }
    @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
    
            if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
                mTextView.setText("KEYCODE_HOME");
                return true;
            }
            else
                return super.dispatchKeyEvent(event);
        }
    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
    
            if( (keyCode==KeyEvent.KEYCODE_BACK) && isLock)
            {
                mTextView.setText("KEYCODE_BACK");
                return true;
            }
               else
                 return super.onKeyDown(keyCode, event);
        }
    @Override
        public void onAttachedToWindow()
        {  
            System.out.println("Onactivity attached :"+isLock);
            if(isLock)
            {   
                this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
                super.onAttachedToWindow();
            }
            else
            {
                this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);     
                super.onAttachedToWindow();
            }
        }
    }
    
    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/tvInfo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
    
        <ToggleButton
            android:id="@+id/btnLock"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOff="UnLocked"
            android:textOn="Locked" />
    
    </LinearLayout>
    
    
    
    哇,这太棒了,正是我想要的!我不知道这一点,以为你无法更改,+1:)IIRC这种覆盖主页按钮的方式谢天谢地,从Android 4.0开始不再有效是的,幸运的是,这种方法在Android 4.0.3上不起作用。@Commonware我添加了安卓:launchMode=“singleInstance”安卓:stateNotNeeded=“true”对于应该显示的活动,因此当单击主页时,我会得到一个选择框来选择。这是唯一的办法,先生?