美文网首页
Android应用全屏与非全屏设置及过度过度问题解决

Android应用全屏与非全屏设置及过度过度问题解决

作者: 小的橘子 | 来源:发表于2019-05-06 10:04 被阅读0次

    全屏设置

    方式一 setContentView前设置FLAG_FULLSCREEN

    public void onCreate(Bundle savedInstanceState) {   
            super.onCreate(savedInstanceState);   
           //无title     
           requestWindowFeature(Window.FEATURE_NO_TITLE);     
            //全屏     
           getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,       
                          WindowManager.LayoutParams. FLAG_FULLSCREEN);         
           setContentView(R.layout.main);   
    }   
    

    方式二 修改界面主题为android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

    用方式一跳转到对应全屏界面时,会看到短暂的状态栏,然后才全屏,而方式二这种方法是不会有这种情况。

    方式三 动态修改全屏或非全屏(推荐)

    假如程序运行过程中,执行了某个操作需要全屏,然后还需要退出全屏,方法如下
    动态全屏

    WindowManager.LayoutParams attrs = getWindow().getAttributes();  
    attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;  
    getWindow().setAttributes(attrs);  
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);  
    // 添加FLAG_LAYOUT_NO_LIMITS标志,window会自动重新布局,呈现全屏的状态
    

    动态退出全屏

    WindowManager.LayoutParams attrs = getWindow().getAttributes();  
    attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);  
    getWindow().setAttributes(attrs);  
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    

    全屏界面切换到非全屏界面

    上述操作有两种:

    • 全屏界面启动非全屏页面
    • 非全屏启动全屏然后按返回键
      但是在页面切换到非全屏界面时,会出现先显示页面内容,然后由于状态栏的出现,整个界面下移一个状态栏高度的问题。

    解决办法

    @Override
    protected void onStart() {
        super.onStart();
        // 1. onStart时调用添加方法
        smoothSwitchScreen();
    }
    private void smoothSwitchScreen() {
        ViewGroup rootView = ((ViewGroup) this.findViewById(android.R.id.content));
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        // 给整个ContentView设置上padding为状态栏高度
        rootView.setPadding(0, statusBarHeight, 0, 0);
        // 该参数会让界面无状态栏限制,填满整个屏幕,从而全屏,由于上padding为状态栏高度,故整体整体显示和默认相同,从而界面不会出现下移
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }
    ``

    相关文章

      网友评论

          本文标题:Android应用全屏与非全屏设置及过度过度问题解决

          本文链接:https://www.haomeiwen.com/subject/nawloqtx.html