Android 按下Home键时如何自动关闭overflow menu(溢出菜单)
解决方案
该问题是Android系统默认行为导致:Activity退到后台时不会主动关闭已展开的OptionsMenu,切回前台后会保留之前的展示状态。你只需要重写Activity的onPause生命周期回调,在方法内主动关闭菜单即可,适配所有Android版本,无兼容问题。
修改步骤
- 在
MainActivity中新增onPause方法重写逻辑 - 在
onPause中调用系统提供的closeOptionsMenu()方法关闭溢出菜单
新增代码片段
@Override protected void onPause() { super.onPause(); // 退到后台时自动关闭溢出菜单 closeOptionsMenu(); }
完整修改后代码
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // 新增的生命周期方法 @Override protected void onPause() { super.onPause(); closeOptionsMenu(); } @Override public boolean onCreateOptionsMenu(Menu menu) { Log.v("RAMKUMARV ONCREATEOPTION", "RAMKUMARV"); MenuInflater inflater = getMenuInflater(); inflater.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) { int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
补充说明:即使当前溢出菜单未展开,调用
closeOptionsMenu()也不会产生任何异常或副作用,不需要额外判断菜单状态,直接调用即可。
问题复现截图

内容的提问来源于stack exchange,提问作者Shadow
相关产品推荐
相关产品推荐

