Переопределить кнопку возврата домой и назад, если логическое значение истинно

Мне было интересно, могу ли я переопределить действие кнопки "Назад" и "Домой" в некоторых случаях. Обычно эти кнопки должны реагировать так же, как и всегда, но в случае, если некоторые настройки верны, я хочу переопределить кнопки и позволить им вызывать мои собственные методы.

Я использую эти два метода, чтобы переопределить эти кнопки:

  @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
   }

6 ответов

Решение

Мне было интересно, могу ли я переопределить действие кнопки "Назад" и "Домой" в некоторых случаях.

Да, вы можете сделать переопределение 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>

Вы вызываете super.onBackPressed() для вызова обычного метода. Пример:

@Override
public void onBackPressed() {    
    if (activated) {
       //doyourthing
    } else {
       super.onBackPressed()
    }
}

Нет, ты не можешь. Что вы можете сделать, так это ovveride метод и управлять логическим значением внутри него:

например:

 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"

  }

Что касается отмены поведения Home Button, вам не повезло.

Однако, если ваше приложение является конкретным и имеет ограниченную целевую аудиторию, такую ​​как межорганизационное приложение, больничный киоск, заказ ресторанов, вы можете попробовать сделать свое приложение "Домашним" (приложение запуска). Вы можете найти хороший пример здесь: Как написать собственное приложение Launcher в Android

И чтобы переопределить события back key, есть много примеров.

Например:

  1. Поймать нажатие клавиш с Android
  2. Переопределить кнопку назад, чтобы действовать как кнопка домой
  3. Android - Как переопределить кнопку "Назад", чтобы она не заканчивала () мою активность?

Я использую это:

public void onBackPressed() {

        switch (screen) {
        case 1:
            screen = 99;
            setContentView(R.layout.menu);
            break;

        case 99:
            finish();
            break;

        }
        return;
    }

Когда я нахожусь в другом экране (кроме экрана меню), я устанавливаю переменный экран в 1. Когда я нажимаю кнопку "Назад", он возвращается к экрану меню (вместо того, чтобы убивать приложение). и присвойте экранной переменной число 99, затем, когда вы снова нажмете кнопку "Назад", приложение будет убито.

Тем не менее, вы не можете изменить кнопку домой.

Сделайте вашу булеву переменную членом переменной

boolean temp;

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

if(temp)
//your methode
else
finish();
            }
Другие вопросы по тегам