2014-01-25 34 views
1

我想向我的GDK應用程序添加一個菜單。我正在使用沉浸式操作,並按照此處的說明進行操作:https://developers.google.com/glass/develop/gdk/ui/immersion-menus實現菜單時奇怪的KeyDown行爲

所有編譯都可以,但實際的選項菜單不起作用。當我點擊觸摸板時沒有任何反應。事實上,這裏似乎是一個額外的副作用,現在沒有按鍵工作。我甚至無法刷卡關閉應用程序。我的玻璃基本上凍結,直到我強制刪除與adb的應用程序。

這裏是我的onkeydown方法:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
     openOptionsMenu(); 
     return true; 
    } 
    return false; 
} 

我在做什麼錯?我完全從文檔中複製它。我需要將活動傳遞給超類嗎?

+0

您有沒有onCreateOptionsMenu實現?你可以發佈其他代碼嗎? –

回答

0

我剛剛上傳了一個相機預覽和放大項目到github https://github.com/xjefftang/smartcamera,它有一個菜單的活動。你可能想看看它。或者看到源代碼,看我怎麼把它實現:

public class ImageViewActivity extends Activity { 
    public static String TAG = "ImageViewActivity"; 
    ImageView mImageview; 
    private GestureDetector mGestureDetector; 
    File mPictureFilePath; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.imageview); 
     Bundle extras = getIntent().getExtras(); 
     mPictureFilePath = (File)extras.get("picturefilepath"); 

     Log.v(TAG, "pictureFilePath=" + mPictureFilePath.getAbsolutePath()); 
     mImageview = (ImageView) findViewById(R.id.picture); 

     Bitmap myBitmap = BitmapFactory.decodeFile(mPictureFilePath.getAbsolutePath()); 
     int h = (int) (myBitmap.getHeight() * (640.0/myBitmap.getWidth())); 

     Bitmap scaled = Bitmap.createScaledBitmap(myBitmap, 640, h, true); 
     mImageview.setImageBitmap(scaled);   

     mGestureDetector = new GestureDetector(this); 

     mGestureDetector.setBaseListener(new GestureDetector.BaseListener() { 
      @Override 
      public boolean onGesture(Gesture gesture) { 
       if (gesture == Gesture.TAP) { 
        Log.v(TAG, "TAP"); 
        openOptionsMenu(); 

        return true; 
       } else if (gesture == Gesture.TWO_TAP) { 
        Log.v(TAG, "TWO_TAP"); 
        return true; 
       } else if (gesture == Gesture.SWIPE_RIGHT) { 
        Log.v(TAG, "SWIPE_RIGHT"); 
        return true; 
       } else if (gesture == Gesture.SWIPE_LEFT) { 
        return true; 
       } else if (gesture == Gesture.LONG_PRESS) { 
        Log.v(TAG, "LONG_PRESS");     
        return true; 
       } else if (gesture == Gesture.SWIPE_DOWN) { 
        Log.v(TAG, "SWIPE_DOWN"); 
        return false; 
       } else if (gesture == Gesture.SWIPE_UP) { 
        Log.v(TAG, "SWIPE_UP"); 
        return true; 
       } else if (gesture == Gesture.THREE_LONG_PRESS) { 
        Log.v(TAG, "THREE_LONG_PRESS"); 
        return true; 
       } else if (gesture == Gesture.THREE_TAP) { 
        Log.v(TAG, "THREE_TAP"); 
        return true; 
       } else if (gesture == Gesture.TWO_LONG_PRESS) { 
        Log.v(TAG, "TWO_LONG_PRESS"); 
        return true; 
       } else if (gesture == Gesture.TWO_SWIPE_DOWN) { 
        Log.v(TAG, "TWO_SWIPE_DOWN"); 
        return false; 
       } else if (gesture == Gesture.TWO_SWIPE_LEFT) { 
        Log.v(TAG, "TWO_SWIPE_LEFT"); 
        return true; 
       } else if (gesture == Gesture.TWO_SWIPE_RIGHT) { 
        Log.v(TAG, "TWO_SWIPE_RIGHT"); 
        return true; 
       } else if (gesture == Gesture.TWO_SWIPE_UP) { 
        Log.v(TAG, "TWO_SWIPE_UP"); 
        return true; 
       } 

       return false; 
      } 
     }); 
    } 



    public boolean onGenericMotionEvent(MotionEvent event) { 
     if (mGestureDetector != null) { 
      return mGestureDetector.onMotionEvent(event); 
     } 
     return false; 
    }   




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.imageview, menu); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.upload: 
      Uri imgUri = Uri.parse("file://" + mPictureFilePath.getAbsolutePath()); 
      Intent shareIntent = ShareCompat.IntentBuilder.from(this) 
        .setText("Share image taken by Glass") 
        .setType("image/jpeg") 
        .setStream(imgUri) 
        .getIntent() 
        .setPackage("com.google.android.apps.docs"); 

      startActivity(shareIntent);   

      return true; 

     case R.id.delete: 
      mPictureFilePath.delete(); 
      Toast.makeText(ImageViewActivity.this, "Deleted", Toast.LENGTH_SHORT).show(); 
      finish(); 
      return true; 


     default: 
      return super.onOptionsItemSelected(item); 
     } 
    }    

} 
0

這裏有一個最小的實施,使菜單的開啓和也向下滑動,以關閉當前活動。如果你有一個Activity Immersion,它會關閉你的應用程序。

// Display menu when user taps on touchpad or dismisses this activity if user swipes down 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { 
      openOptionsMenu(); 
      return true; 
     } else if (keyCode == KeyEvent.KEYCODE_BACK) { 
      finish(); 
     } 
     return false; 
}