我的 OptionMenu 是否可见(我想在 2 分钟后关闭它)

Is my OptionMenu visible (I want to close it after 2 minutes)

我想在激活 2 分钟后关闭选项菜单。原因是该应用程序是为不能依靠触摸屏幕自行关闭的老年人和残疾人使用的!

onCreateOptionMenu 方法在 Activity onCreate 期间被调用。似乎没有明显的方法可以捕捉到菜单正在显示。

onPrepareOptionsMenu()怎么样?

http://developer.android.com/reference/android/app/Activity.html#onPrepareOptionsMenu(android.view.Menu)

"Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown."

然后 closeOptionsMenu() 以编程方式关闭它。

http://developer.android.com/reference/android/app/Activity.html#closeOptionsMenu()

这是一个出于测试目的将超时减少到 10 秒的简单示例:

public class MainActivity6 extends Activity {
    private Handler handler;
    private Runnable menuCloser;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        handler = new Handler();
        menuCloser = new Runnable() {
            @Override
            public void run() {
                closeOptionsMenu();
            }
        };
    }

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add("test");
        super.onCreateOptionsMenu(menu);
        return true;
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        handler.removeCallbacks(menuCloser);
        handler.postDelayed(menuCloser, 10000);
        return super.onPrepareOptionsMenu(menu);
    }
}

奇怪的是,我尝试了一个解决方案,首先使用 onOptionsMenuClosed() 回调在菜单关闭时删除排队的 menuCloser,但从未调用回调。

根据docs,大概应该是:

"This hook is called whenever the options menu is being closed (either by the user canceling (sic!) the menu with the back/menu button, or when an item is selected)."

对您来说更重要的是,使用支持库中的 ActionBarActivity 似乎根本不起作用。 Runnable 执行并调用 closeOptionsMenu() 但菜单未关闭。 (onOptionsMenuClosed() 也不会被调用,无论菜单如何关闭。)

你可能会尝试新的 AppCompatActivity,但我还不能测试它。

我认为您对我的应用程序中的 ActionBarActivity 的看法是正确的。 您说...对您来说可能更重要的是,使用支持库中的 ActionBarActivity 似乎根本不起作用。 Runnable 执行并调用 closeOptionsMenu() 但菜单未关闭。 (无论菜单如何关闭,都不会调用 onOptionsMenuClosed()。)

我的代码非常简单(如果有特殊性的话)...

 @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // Close the menu after a period of time.
        addActionQueueUnique(new TimeAction(20,TimeAction.CLOSE_OPTION_MENU ,"close menu"));
        return super.onPrepareOptionsMenu(menu);
    }

并使用我自己的定时器循环捕捉它

case TimeAction.CLOSE_OPTION_MENU:
                Logd("in TimeAction.CLOSE_OPTION_MENU ");
                activity.closeOptionsMenu();
                //getWindow().closePanel(Window.FEATURE_OPTIONS_PANEL);
                break;

Logd 中的消息出现在日志中的预期位置,但菜单没有关闭。 我可能会等到 Google 的程序员解决这个问题,当底层代码被更正后代码应该可以工作。

感谢您的帮助