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

全屏设置

方式一 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应用全屏与非全屏设置及过度过度问题解决)