赞
踩
适用版本(因为一些方法被高版本弃用或淘汰,可能效果不太好,以下版本验证可用):
- android {
- compileSdkVersion 28
- buildToolsVersion '28.0.0'
- defaultConfig {
- applicationId "cn.ch**g.di***enge.livew***per"
- minSdkVersion 16
- targetSdkVersion 28
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- }
一、先看加载页如下图(图片加了个黑框,方便看清效果)
二、AndroidManifest.xml清单文件中配置如下,改成首先进入加载页
- <activity android:name=".activity.LoadActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
-
-
- <activity android:name=".activity.MainActivity">
-
- </activity>
三、AndroidManifest.xml清单文件主题样式改成如下,(去除标题栏)
android:theme="@style/AppTheme"对应的样式文件
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <item name="android:windowNoTitle">true</item>
- </style>
四、activity_load.xml布局文件如下,图片src改成你的
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:background="@mipmap/gradient_back"
- tools:context="cn.cheng.dierrenge.livewallpaper.activity.LoadActivity">
-
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:adjustViewBounds="true"
- android:scaleType="centerInside"
- android:maxWidth="300dp"
- android:src="@mipmap/load"
- />
-
- </LinearLayout>
五、系统窗口UI工具类如下
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Build;
- import android.support.annotation.RequiresApi;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
-
- /**
- * Created by SecondPersonality on 2021/9/6.
- *
- * 系统UI工具类
- */
- public class SysWindowUi {
-
- /**
- * noStateBarAndNavigationBar 为true时,隐藏系统状态栏和导航栏用于加载页,
- * noStateBarAndNavigationBar 为false时,透明沉浸式系统状态栏和导航栏用于其他页面
- * @param activity
- * @param noStateBarAndNavigationBar
- */
- @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) // 跳过低版本没有此api的编译报错
- public static void hideStatusNavigationBar(Activity activity, Boolean noStateBarAndNavigationBar) {
-
- if (Build.VERSION.SDK_INT < 16) {
- activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- } else {
-
- if (Build.VERSION.SDK_INT >= 28) {
- // 设置窗口占用刘海区
- WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
- lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
- activity.getWindow().setAttributes(lp);
- }
-
- int uiFlags =
- // 稳定布局(当StatusBar和NavigationBar动态显示和隐藏时,系统为fitSystemWindow=true的view设置的padding大小都不会变化,所以view的内容的位置也不会发生移动。)
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE
- // 主体内容占用系统导航栏的空间
- | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
- // 沉浸式(避免某些用户交互造成系统自动清除全屏状态。)
- | View.SYSTEM_UI_FLAG_IMMERSIVE;
-
-
- if (!noStateBarAndNavigationBar) {
- uiFlags = uiFlags
- // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
- |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
- // 状态栏字体颜色设置为黑色这个是Android 6.0才出现的属性 默认是白色
- | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
-
- } else {
- // 隐藏导航栏
- uiFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
-
- if (Build.VERSION.SDK_INT >= 28) {
- // 隐藏状态栏
- uiFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
- } else {
- // 版本小于28不能设置占用刘海区,加载页布局使用白色背景,达到同样的效果
- uiFlags = uiFlags
- // 状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏
- |View.SYSTEM_UI_FLAG_LOW_PROFILE
- // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
- |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
- }
-
- }
-
- activity.getWindow().getDecorView().setSystemUiVisibility(uiFlags);
-
- //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
- activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
-
- //将导航栏设置成透明色
- activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
-
- //将状态栏设置成透明色
- activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
-
- }
-
- }
- }
六、LoadActivity.class加载页activity如下
- import android.content.Intent;
- import android.os.Build;
- import android.os.Handler;
- import android.support.annotation.RequiresApi;
- import android.support.v7.app.AppCompatActivity;
- import android.os.Bundle;
- import cn.cheng.dierrenge.livewallpaper.R;
- import cn.cheng.dierrenge.livewallpaper.util.SysWindowUi;
-
- /**
- * Created by YanGeCheng on 2021/9/6.
- *
- * 加载页activity
- */
- public class LoadActivity extends AppCompatActivity {
-
- @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- // 设置隐藏状态栏和导航栏
- SysWindowUi.hideStatusNavigationBar(this, true);
-
- setContentView(R.layout.activity_load);
-
-
-
- //加载后跳转
- new Handler().postDelayed(() -> {
- jump();
- },3000);
-
- }
-
- private void jump() {
- Intent intent = new Intent();
- intent.setClass(LoadActivity.this, MainActivity.class);
- startActivity(intent);
- this.finish();
- }
- }
以上就完成了一个完美隐藏系统状态栏和导航栏的加载页,接下来就可以开始愉快的安卓应用之旅!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。