App启动页全屏最优方案

遇到的问题: 虽然状态栏隐藏了,可是原状态栏位置上会被黑条占领。

解决方案

  • 作项目为了达到全面屏显示,设置了一个theme主题样式
<style name="FullTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!--设置顶部状态栏是否为透明-->
        <item name="android:windowTranslucentStatus">false</item>

        <!--Android 5.x开始须要把颜色设置透明,不然顶部导航栏会呈现系统默认的浅灰色-->
        <item name="android:statusBarColor">@android:color/transparent</item>

        <!--设置顶部状态栏和底部导航栏是否为透明-->
        <item name="android:windowTranslucentNavigation">true</item>

        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>

        <item name="android:windowFullscreen">true</item>
    </style>
复制代码
  • AndroidManifest.xml
<activity
            android:theme="@style/FullTheme"
            android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
复制代码
  • MainActivity在super.onCreate(savedInstanceState); 调用hideStatusBar() hideBottomUIMenu()
public class MainActivity extends AppCompatActivity {

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

   
    /**
     * 隐藏状态栏
     */
    protected void hideStatusBar(){
        WindowManager.LayoutParams lp = getWindow().getAttributes();
        lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
        getWindow().setAttributes(lp);
    }

    /**
     * 隐藏虚拟按键,而且全屏
     */
    protected void hideBottomUIMenu() {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { 
            View v = this.getWindow().getDecorView();
            v.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY ;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }

}
复制代码
相关文章
相关标签/搜索