2

メニューボタンを無効にしたい。たくさんの記事を読みましたが、何も機能しません。
メニューボタンが押されたイベントさえ検出できません。onKeyDown()、onKeyUp()、onPrepareOptionsMenu()、onCreateOptionsMenu() などのオーバーライド メソッドが機能しませんでした。私はここで本当に必死です、助けてください。

public class MainActivity extends Activity{
TranslateAnimation animateTopLayer;
Button btnOk;
ImageView ivLockMechanism;
ViewGroup rlTopLayer;
FramesSequenceAnimation anim;

@Override
public void onAttachedToWindow() {
    getWindow().addFlags(WindowManager.LayoutParams. FLAG_DISMISS_KEYGUARD);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent lockServiceIntent = new Intent(getApplicationContext(),LockService.class);
    startService(lockServiceIntent);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.test);
    rlTopLayer = (ViewGroup) findViewById(R.id.rlTopLayer);
    ivLockMechanism = (ImageView) findViewById(R.id.ivLockMechanism);
    btnOk = (Button) findViewById(R.id.btnOk);
    btnOk.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            rlTopLayer.startAnimation(animateTopLayer);
        }
    });
    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.pg_0);
    ivLockMechanism.setImageBitmap(b);
    anim = AnimationsContainer.getInstance().unlockMechanismAnimation(ivLockMechanism);
    animateTopLayer = new TranslateAnimation(0, 500,0, 0);
    animateTopLayer.setDuration(1000);
    animateTopLayer.setFillAfter(true);
    animateTopLayer.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            anim.start();
        }
    });
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (  Integer.valueOf(android.os.Build.VERSION.SDK) < 7 
            && keyCode == KeyEvent.KEYCODE_BACK
            && event.getRepeatCount() == 0) {
        onBackPressed();
    }

    if (keyCode == KeyEvent.KEYCODE_MENU){
        return false;
    } 

    return super.onKeyDown(keyCode, event);
}

@Override
public void onBackPressed() {
    return;
}

@Override
protected void onPause() {
    super.onPause();
    finish();
}

}

4

1 に答える 1

6

これは私のために働く:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

このイベントがそれ以上伝播されないようにするには true を返します。このイベントを処理していないため、引き続き伝播する必要があることを示すには false を返します。

@Override
 public boolean onPrepareOptionsMenu (Menu menu) {
     return false;
 }
于 2013-01-24T12:49:35.023 に答える