Android

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);
    }

希望对大家有所帮助,或者有更好的方式可以一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值