您的位置:

Android Splash: 详解安卓启动页

一、安卓手机 Android Splash

在安卓开发中启动页是非常重要的一个部分,它是 App 加载的第一画面,也是用户第一次接触到 App 的地方,对于用户体验非常重要。Android Splash 也称为启动页、闪屏页或者欢迎页,其作用是在应用程序启动时,展示一个品牌标志或其它信息,给用户一个良好的第一印象。在应用的运行过程中,Splash 可以为用户提供缓冲时间,以便加载其它主要 UI,从而加快应用程序的响应速度,保持应用程序的流畅体验。

二、Android Splashscreen关不掉

有些情况下,启动页会有个定时自动关闭的功能,即 Splashscreen。但是有时候我们想要让用户手动关闭 Splashscreen,如何实现呢?在此给出代码示例:

public class MainActivity extends Activity {

    private boolean mIsBackKeyPressed = false;//记录是否有首次按键
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                mIsBackKeyPressed = false;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView splash = findViewById(R.id.img_splash);
        splash.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();//点击图片关闭 Splash
            }
        });
    }

    @Override
    public void onBackPressed() {
        if (!mIsBackKeyPressed) {
            Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
            mIsBackKeyPressed = true;
            mHandler.sendEmptyMessageDelayed(0, 2000);// 2s后恢复状态
        } else {
            mHandler.removeMessages(0);
            super.onBackPressed();
        }
    }
}

这里的思路是通过记录按下返回键的时间来判断用户是否在短时间内(2 秒)再次按下返回键,如果是,则直接退出应用程序。

三、Android Splash 界面

Android Splash 界面设计上要简单、美观、易操作,闪屏的显示时间尽量不要太长,一般来说2到4秒左右的时间比较合适,大于5秒则会显得比较无聊。此外,启动页的设计要与 App 整体 UI 风格相符,提升用户体验,留下好印象,更有利于 App 的推广和用户留存。

四、Android Splashscreen 白屏

有时候 Android Splashscreen 的启动页会出现白屏的情况,这样会让用户觉得 App 相应速度慢,给用户不好的体验,为了解决这个问题,我们可以在 XML 布局文件中加入 Window 的背景颜色:


 // 在这里设置背景颜色

    
   


  

五、Android Splash Activity

Android Splash Activity 具体实现可以参考如下代码:

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 加载 Splash 视图
        setContentView(R.layout.activity_splash);

        // 向 Handler 延时发送启动任务
        mHandler.sendEmptyMessageDelayed(START_ACTIVITY, DELAY_TIME);
    }

    // 常量
    private static final int START_ACTIVITY = 0;
    private static final int DELAY_TIME = 2000; // 延时2秒

    // Handler 消息处理
    private Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg) {
            switch (msg.what) {
                case START_ACTIVITY:
                    Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                    startActivity(intent);
                    finish();
                    break;
            }
            return true;
        }
    });
}

六、Android Splashscreen 广告

一些 App 在启动页展示广告,为了提高用户体验,广告的内容需要与 App 的主题相关。

Android Splashscreen 广告可以用类似 Glide、Picasso 等框架实现:

ImageView image = findViewById(R.id.img_ad);
Glide.with(this).load(adUrl).into(image);

这里的思路是使用 Glide 加载广告的图片。