Android欢迎页Splash实现
第一次写,参考了很多大佬的实现方式,最终选择了其中一种实现方式希望对大家有所帮助。
描述:
由于随着Android的更新,目前AS已经更新到正式版本为4.1.2,创建的应用后及时为空白的项目,在APP冷启动时会出现白屏或者黑屏现象,这使得用户体验很差,总结一下如何改变。
直接上代码吧!
修改AndroidManifest.xml
注意:设置 android:noHistory=“true"后,该Activity在statck中不留历史痕迹。默认的值是false , android:theme=”@style/AppSplash"
@drawable/login_splash此处更换颜色或者图片或者需要即可解决启动白屏,设置null启动为透明后点击APP启动后会有一段时间无反应,其实APP已经在启动了,只是启动时背景为透明而已,交互很不好,用户以为没有点击到APP,不建议使用。
SplashActivity 可以加载网络图片等等根据项目需求即可
<activity
android:name=".ui.activity.SplashActivity"
android:noHistory="true"
android:screenOrientation="landscape"
android:theme="@style/AppSplash">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<style name="AppSplash" parent="android:Theme">
<item name="android:windowBackground">@drawable/login_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
</style>
public class SplashActivity extends AppCompatActivity implements Runnable {
final Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
//恢复正常主题
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
View decorView = getWindow().getDecorView();
//全屏
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
setContentView(R.layout.activity_splash);
// mHandler.postDelayed(this, 1000);
}
@Override
public void run() {
//需要跳转的主页
startActivity(new Intent(SplashActivity.this, MainActivity.class));
}
@Override
public void onBackPressed() {
// super.onBackPressed();
// mHandler.removeCallbacks(this);
}
@Override
protected void onResume() {
super.onResume();
mHandler.postDelayed(this, 1000);
}
@Override
protected void onStop() {
mHandler.removeCallbacks(this);
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
布局文件可以想放你自定义内容。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/login_splash"
tools:context=".ui.activity.SplashActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
在主界面MainActivity中重写onBackPressed
@Override
public void onBackPressed() {
super.onBackPressed();
// 方法 1: goto the default launcher. It's not recommended.
// Intent i = new Intent(Intent.ACTION_MAIN);
// i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// i.addCategory(Intent.CATEGORY_HOME);
// startActivity(i);
// 方法 2: goto the default launcher. It's recommended.
moveTaskToBack(true);
}
希望对大家有所帮助,或者有更好的方式可以一起讨论。