Переопределить кнопку «домой» и «назад» – это случай, когда логическое значение true

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

Я использую эти два метода для переопределения этих кнопок:

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

Solutions Collecting From Web of "Переопределить кнопку «домой» и «назад» – это случай, когда логическое значение true"

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

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

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

И для того, чтобы переопределить события в ключевом ключе, существует множество примеров.

Например:

  1. Catch keypress с Android
  2. Кнопка «Отменить назад», чтобы действовать как кнопка «домой»
  3. Android – Как переопределить кнопку «Назад», чтобы она не закончила () мою активность?

Введите переменную-член переменной типа boolean

 boolean temp; @Override public void onBackPressed() { // call my backbutton pressed method when boolean==true if(temp) //your methode else finish(); } 

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

 public void onBackPressed() { switch (screen) { case 1: screen = 99; setContentView(R.layout.menu); break; case 99: finish(); break; } return; } 

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

Однако вы не можете изменить кнопку «домой».