._android隐藏加载框">
当前位置:   article > 正文

Android 加载页 完美隐藏系统状态栏和导航栏 适用刘海屏_android隐藏加载框

android隐藏加载框

适用版本(因为一些方法被高版本弃用或淘汰,可能效果不太好,以下版本验证可用):

  1. android {
  2. compileSdkVersion 28
  3. buildToolsVersion '28.0.0'
  4. defaultConfig {
  5. applicationId "cn.ch**g.di***enge.livew***per"
  6. minSdkVersion 16
  7. targetSdkVersion 28
  8. versionCode 1
  9. versionName "1.0"
  10. testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  11. }

一、先看加载页如下图(图片加了个黑框,方便看清效果)

二、AndroidManifest.xml清单文件中配置如下,改成首先进入加载页

  1. <activity android:name=".activity.LoadActivity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN" />
  4. <category android:name="android.intent.category.LAUNCHER" />
  5. </intent-filter>
  6. </activity>
  7. <activity android:name=".activity.MainActivity">
  8. </activity>

三、AndroidManifest.xml清单文件主题样式改成如下,(去除标题栏)

android:theme="@style/AppTheme"对应的样式文件
  1. <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  2. <item name="android:windowNoTitle">true</item>
  3. </style>

四、activity_load.xml布局文件如下,图片src改成你的

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:gravity="center"
  8. android:background="@mipmap/gradient_back"
  9. tools:context="cn.cheng.dierrenge.livewallpaper.activity.LoadActivity">
  10. <ImageView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:adjustViewBounds="true"
  14. android:scaleType="centerInside"
  15. android:maxWidth="300dp"
  16. android:src="@mipmap/load"
  17. />
  18. </LinearLayout>

 五、系统窗口UI工具类如下

  1. import android.app.Activity;
  2. import android.graphics.Color;
  3. import android.os.Build;
  4. import android.support.annotation.RequiresApi;
  5. import android.view.View;
  6. import android.view.Window;
  7. import android.view.WindowManager;
  8. /**
  9. * Created by SecondPersonality on 2021/9/6.
  10. *
  11. * 系统UI工具类
  12. */
  13. public class SysWindowUi {
  14. /**
  15. * noStateBarAndNavigationBar 为true时,隐藏系统状态栏和导航栏用于加载页,
  16. * noStateBarAndNavigationBar 为false时,透明沉浸式系统状态栏和导航栏用于其他页面
  17. * @param activity
  18. * @param noStateBarAndNavigationBar
  19. */
  20. @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) // 跳过低版本没有此api的编译报错
  21. public static void hideStatusNavigationBar(Activity activity, Boolean noStateBarAndNavigationBar) {
  22. if (Build.VERSION.SDK_INT < 16) {
  23. activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  24. WindowManager.LayoutParams.FLAG_FULLSCREEN);
  25. } else {
  26. if (Build.VERSION.SDK_INT >= 28) {
  27. // 设置窗口占用刘海区
  28. WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
  29. lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
  30. activity.getWindow().setAttributes(lp);
  31. }
  32. int uiFlags =
  33. // 稳定布局(当StatusBar和NavigationBar动态显示和隐藏时,系统为fitSystemWindow=true的view设置的padding大小都不会变化,所以view的内容的位置也不会发生移动。)
  34. View.SYSTEM_UI_FLAG_LAYOUT_STABLE
  35. // 主体内容占用系统导航栏的空间
  36. | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
  37. // 沉浸式(避免某些用户交互造成系统自动清除全屏状态。)
  38. | View.SYSTEM_UI_FLAG_IMMERSIVE;
  39. if (!noStateBarAndNavigationBar) {
  40. uiFlags = uiFlags
  41. // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
  42. |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  43. // 状态栏字体颜色设置为黑色这个是Android 6.0才出现的属性 默认是白色
  44. | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
  45. } else {
  46. // 隐藏导航栏
  47. uiFlags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
  48. if (Build.VERSION.SDK_INT >= 28) {
  49. // 隐藏状态栏
  50. uiFlags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
  51. } else {
  52. // 版本小于28不能设置占用刘海区,加载页布局使用白色背景,达到同样的效果
  53. uiFlags = uiFlags
  54. // 状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏
  55. |View.SYSTEM_UI_FLAG_LOW_PROFILE
  56. // 在不隐藏StatusBar状态栏的情况下,将view所在window的显示范围扩展到StatusBar下面
  57. |View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
  58. }
  59. }
  60. activity.getWindow().getDecorView().setSystemUiVisibility(uiFlags);
  61. //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
  62. activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  63. //将导航栏设置成透明色
  64. activity.getWindow().setNavigationBarColor(Color.TRANSPARENT);
  65. //将状态栏设置成透明色
  66. activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
  67. }
  68. }
  69. }

 六、LoadActivity.class加载页activity如下

  1. import android.content.Intent;
  2. import android.os.Build;
  3. import android.os.Handler;
  4. import android.support.annotation.RequiresApi;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.os.Bundle;
  7. import cn.cheng.dierrenge.livewallpaper.R;
  8. import cn.cheng.dierrenge.livewallpaper.util.SysWindowUi;
  9. /**
  10. * Created by YanGeCheng on 2021/9/6.
  11. *
  12. * 加载页activity
  13. */
  14. public class LoadActivity extends AppCompatActivity {
  15. @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. // 设置隐藏状态栏和导航栏
  20. SysWindowUi.hideStatusNavigationBar(this, true);
  21. setContentView(R.layout.activity_load);
  22. //加载后跳转
  23. new Handler().postDelayed(() -> {
  24. jump();
  25. },3000);
  26. }
  27. private void jump() {
  28. Intent intent = new Intent();
  29. intent.setClass(LoadActivity.this, MainActivity.class);
  30. startActivity(intent);
  31. this.finish();
  32. }
  33. }

       以上就完成了一个完美隐藏系统状态栏和导航栏的加载页,接下来就可以开始愉快的安卓应用之旅!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/635475
推荐阅读
相关标签