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

Вот минимальная реализация, что позволит как открытие меню и также ударяя вниз, чтобы закрыть текущую активность. Если у вас есть одно действие 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; 
} 
Смежные вопросы