26

我的应用程序将在 10 秒内加载起始页。在 10 秒的时间里,android 屏幕是空白的。那时我想添加加载屏幕。如何添加它?并在应用程序中告诉我如何知道开始页面正在加载?并告诉我如何在我的应用程序中进行操作?

4

7 回答 7

41

使用进度对话框。

ProgressDialog dialog=new ProgressDialog(context);
dialog.setMessage("message");
dialog.setCancelable(false);
dialog.setInverseBackgroundForced(false);
dialog.show();

每当您的 UI 准备好数据时隐藏它。称呼 :

dialog.hide();
于 2013-06-28T04:55:47.200 回答
27

您可以在第一个加载活动中使用启动画面,如下所示:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        Thread welcomeThread = new Thread() {

            @Override
            public void run() {
                try {
                    super.run();
                    sleep(10000);  //Delay of 10 seconds
                } catch (Exception e) {

                } finally {

                    Intent i = new Intent(SplashActivity.this,
                            MainActivity.class);
                    startActivity(i);
                    finish();
                }
            }
        };
        welcomeThread.start();
    }

希望这段代码对您有所帮助。

于 2013-06-28T04:38:47.220 回答
26

请阅读这篇文章

克里斯·斯图尔特在那里写道:

启动画面只是浪费你的时间,对吧?作为一名 Android 开发人员,当我看到启动画面时,我知道一些糟糕的开发人员不得不在代码中添加三秒延迟。

然后,我必须盯着某张图片三秒钟,直到我可以使用该应用程序。每次启动时我都必须这样做。我知道我打开了哪个应用程序。我知道它的作用。就让我用吧!

启动画面的正确方式

我相信谷歌并没有自相矛盾。旧的建议和新的建议并存。(也就是说,使用闪屏仍然不是一个好主意,会浪费用户的时间。请不要这样做。)

但是,Android 应用程序确实需要一些时间才能启动,尤其是在冷启动时。那里有一个您可能无法避免的延迟。与其在这段时间留下空白屏幕,不如向用户展示一些好东西?这是谷歌提倡的方法。不要浪费用户的时间,也不要在他们第一次启动应用程序时向他们显示应用程序的空白、未配置部分。

如果您查看 Google 应用程序的最新更新,您会看到启动画面的适当用途。例如,看看 YouTube 应用程序。

在此处输入图像描述

于 2017-02-22T14:50:51.887 回答
3

您可以创建自定义加载屏幕而不是启动屏幕。如果您显示 10 秒的闪屏,这对于用户体验来说不是一个好主意。所以最好添加一个自定义加载屏幕。对于自定义加载屏幕,您可能需要一些不同的图像来使其感觉像 gif。之后在res文件夹中添加图像并创建一个像这样的类:-

public class LoadingScreen {private ImageView loading;

LoadingScreen(ImageView loading) {
    this.loading = loading;
}

public void setLoadScreen(){
    final Integer[] loadingImages = {R.mipmap.loading_1, R.mipmap.loading_2, R.mipmap.loading_3, R.mipmap.loading_4};
    final Handler loadingHandler = new Handler();
    Runnable runnable = new Runnable() {
        int loadingImgIndex = 0;
        public void run() {
            loading.setImageResource(loadingImages[loadingImgIndex]);
            loadingImgIndex++;
            if (loadingImgIndex >= loadingImages.length)
                loadingImgIndex = 0;
            loadingHandler.postDelayed(this, 500);
        }
    };
    loadingHandler.postDelayed(runnable, 500);
}}

在您的 MainActivity 中,您可以像这样将 a 传递给 LoadingScreen 类:-

private ImageView loadingImage;

不要忘记在activity_main 中添加一个ImageView。之后像这样调用 LoadingScreen 类;

LoadingScreen loadingscreen = new LoadingScreen(loadingImage);
loadingscreen.setLoadScreen();

我希望这能帮到您

于 2016-12-27T10:21:56.010 回答
2
public class Splash extends Activity {

    private final int SPLASH_DISPLAY_LENGHT = 3000;            //set your time here......

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

        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                /* Create an Intent that will start the Menu-Activity. */
                Intent mainIntent = new Intent(Splash.this,MainActivity.class);
                Splash.this.startActivity(mainIntent);
                Splash.this.finish();
            }
        }, SPLASH_DISPLAY_LENGHT);
    }
}
于 2013-06-28T05:36:31.083 回答
1

如果应用程序在那 10 秒内没有做任何事情,这将形成一个糟糕的设计,只会让用户等待 10 秒什么都不做。

如果其中发生了一些事情,或者您希望实现 10 秒延迟启动画面,这里是代码:

ProgressDialog pd;
pd = ProgressDialog.show(this,"Please Wait...", "Loading Application..", false, true);
pd.setCanceledOnTouchOutside(false);
Thread t = new Thread()
{ 
      @Override
      public void run()
      {
                try
                {
                    sleep(10000)  //Delay of 10 seconds
                } 
        catch (Exception e) {}
        handler.sendEmptyMessage(0);
        }
} ;
t.start();

//Handles the thread result of the Backup being executed.
private Handler handler = new Handler()
{
    @Override
    public void handleMessage(Message msg) 
    {
        pd.dismiss();
        //Start the Next Activity here...

    }
};
于 2013-06-28T06:40:40.533 回答
0

编写代码:

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        Thread welcomeThread = new Thread() {

            @Override
            public void run() {
                try {
                    super.run();
                    sleep(10000)  //Delay of 10 seconds
                } catch (Exception e) {

                } finally {

                    Intent i = new Intent(SplashActivity.this,
                            MainActivity.class);
                    startActivity(i);
                    finish();
                }
            }
        };
        welcomeThread.start();
    }
于 2016-09-14T11:17:28.020 回答