0

だから私はこのコードを持っています..私はオーバーフローメニューを強制するために(より良い言葉がないために)ハックを使用しています。SubMenuを使用してオーバーフローアイテムを作成しています。

これが私のコードです:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    main = menu;

    getSupportActionBar()
            .setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // Create the search view
    SearchView searchView = new SearchView(getSupportActionBar()
            .getThemedContext());
    searchView.setQueryHint("Search outlets...");
    searchView.setOnQueryTextListener(new OnQueryTextListener()
    {

        @Override
        public boolean onQueryTextSubmit(String query)
        {
            Toast.makeText(con, "Search: " + query, 0).show();
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText)
        {
            // TODO Auto-generated method stub
            return false;
        }
    });

    main.add("Search")
            .setIcon(R.drawable.abs__ic_search)
            .setActionView(searchView)
            .setShowAsAction(
                    MenuItem.SHOW_AS_ACTION_IF_ROOM
                            | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

    sub = main.addSubMenu("");
    sub.add("All Outlets");
    sub.add("Categories");

    MenuItem subItem = sub.getItem();
    subItem.setIcon(R.drawable.abs__ic_menu_moreoverflow_normal_holo_dark);
    subItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    return super.onCreateOptionsMenu(main);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_MENU)
    {
        main.performIdentifierAction(main.getItem(1).getItemId(), 0);
        return true;
    }
    return super.onKeyUp(keyCode, event);
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    if (item.getTitle().equals("All Outlets"))
    {
        Intent alloutlets = new Intent(con, AllOutlets.class);
        startActivity(alloutlets);
        return true;
    }

    else if (item.getItemId() == android.R.id.home)
    {
        finish();
        return true;
    }

    else
    {
        return false;
    }
}

これで、4.0.4デバイスでハードウェアオプションキーを押すたびに、展開されたオーバーフローが表示されるのではなく、SearchViewが展開されます。

また、これを行うための適切な方法はありますか?サブメニューなどを使用せずに。

4

1 に答える 1

1

xmlレイアウトでアイテムを作成してから、onKeyUpメソッドで次のようにします。

menu.performIdentifierAction(menu.findItem(R.id.overflow_menu), 0);

ここで、overflow_menuは、次のように、サブメニューを含むアイテムのIDです。

<item
    android:id="@+id/overflow_menu"
    android:icon="?actionbar_icon_overflow"
    android:showAsAction="always">
        <menu>
            <!-- subitems -->
        </menu>
</item>
于 2013-02-20T07:28:37.100 に答える