向Google的新Splashscreen模式添加进度指示器

时间:2016-08-30 22:30:25

标签: android xml splash-screen

在浏览了这篇博文Splash Screens the Right Way后,我发现了Google创建启动画面的新方法。

但是这个新方法的问题是在启动画面中添加了一个进度条/指示器。

我找到了几个解决方案,但它们都是自定义xml布局而不是Drawables

我还尝试在我的Background_splash.xml中创建一个进度对话框,该对话框位于我的drawable文件夹中,但是我收到了一个错误,不允许这样做。

我的应用程序从启动画面启动到App介绍活动,然后启动到主活动。

有没有办法在这种类型的闪屏中添加进度指示器/栏?

以下是使用正确方式启动画面创建的代码教程

Background_splash.xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:drawable="@color/grey"/>

<item>
    <bitmap
        android:gravity="center"
        android:src="@mipmap/ic_launcher"/>

</item>

的AndroidManifest.xml

    <activity
        android:name="com.domain.app.appintro.SplashActivity"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Styles.xml

 <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowBackground">@drawable/background_splash</item>
</style>

3 个答案:

答案 0 :(得分:1)

答案是你不能!如果您想在应用加载之前显示启动画面,通过主题,它必须是静态图像。
如果要在应用程序加载后显示进度条,例如,如果需要下载数据,则可以向启动活动添加进度条,这将在静态图像和应用程序完成加载后显示。
如果您在应用程序加载后无需等待,那么您只是通过添加另一个等待时间浪费用户时间,并制作糟糕的应用程序。
所有这些都可以从您链接的文章的评论和回复中理解。

答案 1 :(得分:0)

您是否考虑使用AsyncTask加载progressDialog。您可能正在尝试在主线程中下载阻止启动屏幕加载的内容。

public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // Show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);

        // Start a new thread that will download all the data
        new DownloadTask().execute("Any parameters my download task needs here");
}

    private class DownloadTask extends AsyncTask<String, Void, Object> {
         protected Object doInBackground(String... args) {
         Log.i("MyApp", "Background thread starting");

         // This is where you would do all the work of downloading your data

         return "replace this with your data object";
     }

     protected void onPostExecute(Object result) {
         // Pass the result data back to the main activity
         MyActivity.this.data = result;

         if (MyActivity.this.pd != null) {
             MyActivity.this.pd.dismiss();
         }
     }
}    

}

以此作为起点,并将其作为mainActivity的内部类。

答案 2 :(得分:0)

正如@lionscribe正确地说的那样,用这种方法无法创建自定义初始屏幕。但是,这个http://saulmm.github.io/avoding-android-cold-starts可能会帮助那些想要在新的闪屏方法中为元素设置动画的人。