在浏览了这篇博文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>
答案 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可能会帮助那些想要在新的闪屏方法中为元素设置动画的人。