700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android 加载页 完美隐藏系统状态栏和导航栏 适用刘海屏

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

时间:2020-06-16 17:20:08

相关推荐

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

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

android {compileSdkVersion 28buildToolsVersion '28.0.0'defaultConfig {applicationId "cn.ch**g.di***enge.livew***per"minSdkVersion 16targetSdkVersion 28versionCode 1versionName "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="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/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"><ImageViewandroid: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 /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 /9/6.** 加载页activity*/public class LoadActivity extends AppCompatActivity {@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)@Overrideprotected 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();}}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。