7

バージョン4.2にアップグレードしたところ、ForceOverflowの親テーマが削除されたように見えるため、古いコードがコンパイルされなかったことがわかりました。

この問題をグーグルで調べた後、デバイスの一貫性のあるメニューボタンを維持するために意図的に削除されたようです。

物理的なメニューボタンを使用することについての議論は理解していますが、私はそれに同意しません...さらに、それらの古いメニューはとても醜いです。

ユーザーが以前の機能にアクセスできないと言ってほしくないので(結局のところ、メニューボタンが画面に表示されるように移動された理由です)、ここでの私のオプションは何ですか?これは将来のリリースで変更されますか?以前のバージョンのABSに固執し、最近のバージョンで修正された古いABSライブラリのその他のバグに対処する必要がありますか?回避策はありますか?

4

1 に答える 1

9

「本物の」オーバーフロー メニューを取得しようとする代わりに、SubMenu を使用してそれを偽造することができます。

元のオーバーフロー ボタンと同じように表示され、同じように動作しますが、常にそこにあるため、より優れています。

private Menu mainMenu;
private SubMenu subMenu1;

    @Override
public boolean onCreateOptionsMenu(Menu menu) {

    mainMenu = menu;

    subMenu1 = menu.addSubMenu("");
    subMenu1.add("Settings");
    subMenu1.add("About");
    subMenu1.add("Help");

    MenuItem subMenu1Item = subMenu1.getItem();
    subMenu1Item.setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_dark);
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    return super.onCreateOptionsMenu(menu);
}

もちろん、前と同じように subMenus を設定できます。groudID、itemIDなどで

メニュー アイコンとして *ic_menu_moreoverflow_normal_holo_dark* を既に選択していることに注意してください。この方法では、ボタンもオーバーフローのように見えます。

ここで、ユーザーがハードウェア メニュー ボタンを押したときにこのサブメニューを開く必要があります。前に行ったように mainMenu と subMenu1 を設定すると、これを非常に簡単に行うことができます。

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

インポートすることに注意してください:

import com.actionbarsherlock.view.SubMenu;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

はない:

import android.view.MenuItem;
于 2012-10-15T01:46:37.893 に答える