6

アクションバーのメニューボタンのクリック/タップを検出できますか?つまり、オーバーフローメニュー項目を表示するために使用されますか?

デフォルトでは、「設定」という 1 つの項目を含むリストが開きます。スクリーンショットは次のとおりです。

今までは「2」のクリックを検出していましたが、「1」のクリックを検出したいです。

4

4 に答える 4

14

オーバーフロー メニューのクリックを検出するには、次のコードを使用します。

@Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if(featureId == AppCompatDelegate.FEATURE_SUPPORT_ACTION_BAR && menu != null){
        //overflow menu clicked, put code here...
    }
    return super.onMenuOpened(featureId, menu);
}

@Override
public void onPanelClosed(int featureId, Menu menu) {
    ...
}

そのようなメニューがある場合に、メニュー項目のクリックを検出するには:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu2" android:alphabeticShortcut="b"
        android:title="Menu No. 2" android:orderInCategory="2">
        <menu >
        <group android:id="@+id/group2" android:checkableBehavior="single">
            <item android:id="@+id/submenu1" android:title="SubMenu No. 1" />
            <item android:id="@+id/submenu2" android:title="SubMenu No. 2" />
        </group>  
        </menu>
    </item>
</menu>

クリックを検出できるはずです

onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Log.w("ANDROID MENU TUTORIAL:", "onOptionsItemSelected(MenuItem item)");

    // Handle item selection
    switch (item.getItemId()) {
    case R.id.menu2:
        Toast.makeText(this, "Clicked: Menu No. 2", Toast.LENGTH_SHORT).show();
        return true;   
        ...
}
于 2014-08-12T08:09:08.563 に答える
1

最後に私は解決策を見つけました。FragmentActivity.onKeyDown をオーバーライドする

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    switch (keyCode) {

    case KeyEvent.KEYCODE_MENU:
        // Do Sometihng
        break;

    default:
        break;
    }
    return super.onKeyDown(keyCode, event);
} 
于 2014-08-12T09:46:17.357 に答える