【问题标题】:How to make a splash screen (screen visible when app starts)?如何制作启动画面(应用启动时屏幕可见)?
【发布时间】:2010-02-08 16:04:13
【问题描述】:

我有一个简单的应用程序,它启动,从网络加载 xml 提要,您可以浏览新闻列表,然后阅读所选新闻项目的详细信息。我想做的是有一个启动画面,这意味着一旦你点击应用程序,它应该显示一个图像(在我的例子中是应用程序名称),然后只有在它们加载后才显示新闻列表。

我读到过类似(我认为)的问题,通常人们说要使用 FrameLayout,但我无法真正解决。我不确定这是否可以在启动的第一个活动中完成,也许我应该只在一个活动中显示这个启动图像,然后才调用显示我的新闻列表的活动?

我知道在 iPhone 上,您可以在开发时在应用设置中设置启动画面,如果在 android 的应用清单中有此功能会很不错...

【问题讨论】:

  • 您知道启动画面无济于事,只会让您的应用启动更慢...请不要使用它们。
  • 我相信它的缺点远远超过了您从启动画面中获得的任何好处。
  • 我没有看到任何缺点,而不是看着黑屏 2 或 3 秒(或更长时间),你正在看一个图像,在我看来更好,至少你知道应用程序已启动。
  • 另一种选择是让应用程序的背景变成半透明的,这样桌面就会一直显示到新闻源加载

标签: android splash-screen


【解决方案1】:

Android 建议您在启动时执行冗长的计算时利用启动画面。以下是 Android 开发者网站的摘录 - 响应性设计:

“如果您的应用程序有一个耗时的初始设置阶段,请考虑尽快显示启动屏幕或渲染主视图并异步填写信息。无论哪种情况,您都应该以某种方式表明正在取得进展,以免用户感知到应用程序被冻结。” -- Android 开发者网站

您可以创建一个显示进度对话框的活动,同时使用 AsyncTask 从网络下载 xml 提要,对其进行解析,将其存储到数据库(如果需要),然后启动显示新闻提要的 Activity。通过调用finish()关闭splash Activity

这是一个框架代码:


public class SplashScreen extends Activity{
   @Override
   public void onCreate(Bundle savedInstanceState){
      super.onCreate(savedInstanceState);
      // set the content view for your splash screen you defined in an xml file
      setContentView(R.layout.splashscreen);

      // perform other stuff you need to do

      // execute your xml news feed loader
      new AsyncLoadXMLFeed().execute();

   }

   private class AsyncLoadXMLFeed extends AsyncTask<Void, Void, Void>{
      @Override
      protected void onPreExecute(){
            // show your progress dialog

      }

      @Override
      protected Void doInBackground(Void... voids){
            // load your xml feed asynchronously
      }

      @Override
      protected void onPostExecute(Void params){
            // dismiss your dialog
            // launch your News activity
            Intent intent = new Intent(SplashScreen.this, News.class);
            startActivity(intent);

            // close this activity
            finish();
      }

   }
}

希望有帮助!

【讨论】:

  • 嗨,如果我有多个提要,并且想在第一个提要完成并显示在第一个活动中之后开始加载第二个提要,该怎么办。在这个例子中我如何做并发线程?
【解决方案2】:

我知道这已经过时了,但对于那些仍然面临这个问题的人,你可以使用这个简单的android-splash library 来显示你的启动画面。

SplashBuilder
        .with(this, savedInstanceState)
        .show();

您可以设置SplashTask,它会在显示初始屏幕时执行。

【讨论】:

    猜你喜欢
    • 2015-07-07
    • 2023-02-10
    • 1970-01-01
    • 2021-07-09
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    相关资源
    最近更新 更多