2012-01-18 2 views
1
package woot.wat.wen; 

import android.app.Activity; 
import android.os.Bundle; 
import android.text.Layout; 
import android.util.Log; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.View.OnKeyListener; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.view.ViewGroup.MarginLayoutParams; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

public class HmmActivity extends Activity implements OnKeyListener { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     //RelativeLayout Relay=(RelativeLayout) getResources().getLayout(R.layout.main); 
     ViewGroup group = (ViewGroup) findViewById(R.id.relativeLayout1); 
     TextView tv=(TextView) findViewById(R.id.tv1); 
     MarginLayoutParams mapara = new MarginLayoutParams(tv.getLayoutParams()); 
     mapara.setMargins(225, 260, 120, 120); 


     LayoutParams params=new RelativeLayout.LayoutParams(mapara); 
     tv.setLayoutParams(params); 
     group.setFocusable(true); 
     group.setOnKeyListener(this); 

     int children = group.getChildCount(); 
     for (int i = 0; i < children; i++) { 

      View child = group.getChildAt(i); 
      child.setFocusable(true); 
      child.setOnKeyListener(this); 


      } 



     //tv.setOnKeyListener(this); 


    } 


    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // TODO Auto-generated method stub 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
       // back=true; 
        // do something on back. 
      Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT); 




      System.out.println("WTF"); 


        return true; 
       } 



     else  

      return super.onKeyDown(keyCode, event); 
    } 


    public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (keyCode == KeyEvent.KEYCODE_BACK /*&& event.getRepeatCount() == 0*/) { 
       // back=true; 
        // do something on back. 
        Log.d("backk", "goingoin backback"); 






        return true; 
       } 

       else 
       // TODO Auto-generated method stub 
       return super.onKeyDown(keyCode, event); 
       //return false; 
      } 






    } 

コードでわかるように、私はバックキーを押したときに何かをしようとしていますが、onkeyコードは決して使用されていないようです。 プログラムは、バックが押されるたびに、エミュレータとデバイスの両方でonKeyメソッドに入るようなことはありません。何が間違っていますか?はOnkeylistenerに入っていませんか?

私は更新されたコードを入れました。

私はコード

package you.packag.namespac; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.widget.Toast; 

public class BlActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
     Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT); 
     return true; //that is important 
    }else 
    return super.onKeyDown(keyCode, event); 
} 
} 

はまだ同じproblem.Theトーストがdisplayed.Theプログラムの流れ/制御が真のリターンの両方に行くとスーパーreturn文されていない新しいクリーンproject.Heresを作成しました[OK]をそれがどうやって起こっているのかは本当にわかりません。本当に私を夢中にしています。私は間違っています。助けてください。

答えて

2

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if(keyCode==KeyEvent.KEYCODE_BACK){ 
     Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT).show(); 
     return true; //that is important 
    }else 
    return super.onKeyDown(keyCode, event); 
} 

またはあなたのコード内に試してみてください。

1)あなたのonKey方法

2前@Overrideを入れて)変更return false

return super.onKey(keyCode, event)にはまた - それはへneccesaryではありませんOnKeyListenerを実装する

+0

よく使用していますkeydownプログラムはif(keycode back)に入るようですが、それはログを出力するように見えます。押されているバックキーであっても、常に 'else return super'に行くようです。 – shady2020

+0

@ shady2020は、 'else super'ではなく' else super'に行くように見えます(異なる行に配置しようとする)。あなたはこの瞬間を捉えるためにブレークポイントを置いていますか、それともちょっとした直感ですか? ) –

+0

ブレークポイント...ステップ/ステップイン等...バックを押すとifブロックとelseブロックの両方に行きます – shady2020

0

onKeyDown()を無効にし、onKeyDownListenerに設定する必要があります。とにかく、単にonBackPressed()を上書きすることができます。

関連する問題