2012-04-05 1 views
10

Ich frage mich, ob ich die Aktion der Rückseite und Home-Taste in einigen Fällen überschreiben kann. Normalerweise sollten diese Tasten nur so reagieren, wie sie es immer tun, aber in einem Fall, in dem eine Einstellung wahr ist, möchte ich die Tasten außer Kraft setzen und sie meine eigenen Methoden aufrufen lassen.Override Home-und Zurück-Taste ist Fall ein Boolean ist wahr

Ich bin mit diesen beiden Methoden, um diese Tasten außer Kraft zu setzen:

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

Antwort

41

Ich habe mich gefragt, ob ich die Aktion der Zurück und Home-Taste in einigen Fällen überschreiben kann.

Ja, Sie können die Schaltfläche Home überschreiben.

Ich habe eine Anwendung entwickelt, die harte Taste deaktivieren, können Sie schauen. Ich habe eine Umschaltknopf genommen, die alle hart Knopf verriegelt arbeiten außer Strom Taste

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

Wow, das ist großartig, genau das, was Ich suche ! – Diego

+1

Wusste das nicht, dachte du könntest es nicht ändern, +1 :) – Bigflow

+1

Großartig! es funktioniert perfekt. – Dharmendra

3

Nein, Sie können nicht. Was können Sie tun, ist die Methode ovveride und die boolean Inneren verwalten:

zum Beispiel:

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" 

    } 
1

Ihre boolean Variable Membervariable machen

boolean temp; 

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

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

In Bezug auf das Überschreiben der Verhalten der Home Button you are out of luck.

Wenn Ihre App jedoch eine bestimmte App ist und eine begrenzte Zielgruppe hat, wie z. B. organisationsübergreifende App, Krankenhauskiosk oder Restaurantbestellung, können Sie versuchen, Ihre App als Home (die Launcher-App) zu erstellen. Sie können hier ein gutes Beispiel finden: How to Write Custom Launcher App in Android

Und um die Zurückschlüsselereignisse zu überschreiben, gibt es viele Beispiele.

Zum Beispiel:

  1. Catch keypress with android
  2. Override back button to act like home button
  3. Android - How To Override the "Back" button so it doesn't Finish() my Activity?
4

Sie super.onBackPressed() aufrufen, die normale Methode aufzurufen. Exemple:

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

Ich benutze diese:

public void onBackPressed() { 

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

     case 99: 
      finish(); 
      break; 

     } 
     return; 
    } 

Wenn ich in einem anderen Bildschirm bin (andere dann Menü-Bildschirm), habe ich die Variable Bildschirm 1. Wenn ich die Zurück-Taste drücken geht es zurück zum Menübildschirm (anstatt die App zu beenden). und geben Sie der Bildschirmvariable die Zahl 99, dann, wenn Sie den Zurück-Knopf erneut drücken, tötet es die App.

Sie können die Home-Taste jedoch nicht ändern.

Verwandte Themen