Я создал меню в своем единственном упражнении следующим образом:
/ меню / my_menu_list.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/mn_about" android:title="About"
android:icon="@drawable/about" />
<item android:id="@+id/mn_display_list" android:title="Display List"
android:icon="@drawable/display_list" />
</menu>
Также переопределите эти методы.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu_list, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mn_about:
startActivity(new Intent(this, About.class));
break;
case R.id.mn_display_list:
startActivity(new Intent(this, DisplayList.class));
break;
}
}
Те работают отлично. Теперь мне нужно отключить ключ поиска и ключ камеры при отображении этого меню. Следующий код отлично работает для активности, но я не знаю, куда поместить этот код для меню.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_CAMERA)) {
return false;
}
if ((keyCode == KeyEvent.KEYCODE_SEARCH)) {
return false;
}
return super.onKeyDown(keyCode, event);
}
Редактировать 1
Я отключил камеру для всего приложения. Для этого я добавил следующий тег получателя в файл манифеста:
<receiver android:name=".MyReceiver">
<intent-filter android:priority="10000">
<action android:name="android.intent.action.CAMERA_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter android:priority="12000">
<action android:name="android.intent.action.VOICE_COMMAND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter android:priority="11000">
<action android:name="android.intent.action.SEARCH_LONG_PRESS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
Также создан класс Receiver, расширяющий BroadcastReceiver.
public class Receiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
abortBroadcast();
}
}
Это решено для камеры, но не работает при долгом поиске и голосовом наборе номера.
Редактировать 2
Я также попробовал следующий способ управления ключом Long_Press_Search. Но не работает.
public class MyMenuInflater extends MenuInflater implements OnKeyListener {
public MyMenuInflater(Context context) {
super(context);
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
Log.d("KeyPress", "search");
return true;
}
return false;
}
}
И изменил onCreateOptionsMenu () следующим образом.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MyMenuInflater inflater=new MyMenuInflater(this);
inflater.inflate(R.menu.my_menu_list, menu);
return true;
}
Не фиксирует событие нажатия клавиши.
Что мне нужно изменить?