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メソッドに入ることはありません。

更新されたコードを配置しました。

新しいクリーンなプロジェクトを作成しました。コードは次のとおりです。

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);
}
}

それでも同じ問題トーストが表示されないプログラムフロー/制御は、戻るが押されるたびにtrueを返すとsuperステートメントを返すの両方に行きますそれがどのように起こるべきか実際にはわかりません本当に私を夢中にさせます小さな何かでなければなりません私は間違っています。助けてください。

4

3 に答える 3

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)@OverrideonKeyメソッドの前に置きます

2)return falseに変更return super.onKey(keyCode, event)

また、OnKeyListenerを実装する必要はありません

于 2012-01-18T17:31:35.380 に答える
0

代わりに、public boolean onKeyDown(int keyCode、KeyEvent event)を使用してみてください。

于 2012-01-18T17:25:07.953 に答える
0

をオーバーライドonKeyDown()して設定する必要がありますonKeyDownListener。とにかく、あなたは単にオーバーライドすることができますonBackPressed()

于 2012-01-18T17:25:55.440 に答える