1

当我们单击三个点时,我正在显示溢出菜单列表。当我按下主页按钮并再次启动应用程序时,溢出菜单列表仍在显示。如何关闭溢出菜单列表窗口?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        Log.v("RAMKUMARV ONCREATEOPTION", "RAMKUMARV");

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);

        // Inflate the menu; this adds items to the action bar if it is present.
        //  getMenuInflater().inflate(R.menu.menu_main, menu);
        MenuItem item = menu.findItem(R.id.action_settings);
        item.setVisible(true);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

附图

4

3 回答 3

2

您可以有一个活动字段,在触发时存储选项/溢出菜单onCreateOptionsMenu(),然后使用close()方法在单击主页按钮时关闭菜单,即在onUserLeaveHint().

public class MainActivity extends AppCompatActivity {

    // Field to store the overflow menu
    private Menu mOverflowMenu;

    // omitted rest of your code

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        mOverflowMenu = menu;
        
        // omitted rest of your code
        return true;
    }
    
    // Dismissing the overflow menu on home button click
    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        mOverflowMenu.close();
    }   
    
}
于 2021-06-18T13:11:52.843 回答
0

MainActivity在级别声明菜单项,如下所示:

public class MainActivity extends AppCompatActivity {

    private MenuItem overflowItem;

    ...

}

现在您应该在方法中实例化对象onCreateOptionsMenu,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    ...

    overflowItem = menu.findItem(R.id.action_settings);
    overflowItem.setVisible(true);
    return true;
}

然后您可以使用该onPause方法将overflowItem设置为不再可见:

@Override
public void onPause() {
    super.onPause();
    overflowItem.setVisible(false);
}

最后记得用它使用的地方替换你的MenuItem item对象。overflowItem

于 2021-06-16T10:23:38.703 回答
0

要关闭溢出菜单,您只需closeOptionsMenu()在 Activity 中调用即可。

关闭选项菜单()

以编程方式关闭选项菜单。如果选项菜单已关闭,则此方法不执行任何操作。

您可以在 onPause() 方法中调用它,如下所示:

@Override
public void onPause() {
   super.onPause();
   closeOptionsMenu();
}

或者如果您只想在用户按下 Home 键时调用它,您可以使用onUserLeaveHint()如下所示:

@Override
protected void onUserLeaveHint() {
  super.onUserLeaveHint();
  closeOptionsMenu();
}
于 2021-06-18T12:37:11.277 回答