繁体   English   中英

显示弹出菜单时如何保持全屏?

[英]How to keep full screen when show popup menu?

我在平板电脑上运行我的应用程序,它有状态栏(在屏幕顶部)和导航栏(在屏幕底部)。 我使用此代码使Activity Full screen

 public void hideNavigationBar() {
    final View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(setSystemUiVisibility());

}

public static int setSystemUiVisibility() {
    return View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
}

然后当我触摸Button ,我想显示一个PopupMenu 问题是:显示PopupMenu时,会出现状态栏和导航栏

我试图添加这一行:

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

它适用于状态栏。 但是在显示PopupMenu导航栏仍然出现

显示PopupMenu时如何保持全屏?

编辑:这是我显示PopupMenu的代码:

    ImageView btnOpen = (ImageView) findViewById(R.id.image_view_open);
    btnOpen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popupMenu = new PopupMenu(ActivityViewImage.this, v);
            getMenuInflater().inflate(R.menu.context_menu_image, popupMenu.getMenu());
            popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    //do something
                    return true;
                }
            });
            popupMenu.show();
        }
    });

TOP 你可以试试这个代码希望这可以帮助你..

 @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

只需在弹出菜单消失时调用您的hideNavigationBar() 您可以在您的主要活动中这样做(kotlin 中的代码):

override fun onWindowFocusChanged(hasFocus: Boolean) {
    if (hasFocus) hideNavigationBar()
    super.onWindowFocusChanged(hasFocus)
}

我无法完成确切的行为,但是在上下文菜单关闭后立即使活动全屏显示对我的用例来说效果很好。

override fun onContextMenuClosed(menu: Menu) {
    super.onContextMenuClosed(menu)
    fullScreen()
}

这是我使用的全屏方法:

fun Activity.fullScreen() {
    if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        val v = this.window.decorView
        v.systemUiVisibility = View.GONE
    } else if(Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        val decorView = window.decorView
        val uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
                View.SYSTEM_UI_FLAG_FULLSCREEN or
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        //original code from stackOverFlow: View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        decorView.systemUiVisibility = uiOptions
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM