我想让个人应用看起来更专业,因此我决定要制做一个初始屏幕。 android
我将如何建立它而后实现它? ios
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Thread t=new Thread() { public void run() { try { sleep(2000); finish(); Intent cv=new Intent(MainActivity.this,HomeScreen.class/*otherclass*/); startActivity(cv); } catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); }
请注意,此解决方案不会让用户等待更多:启动屏幕的延迟取决于应用程序的启动时间。 app
当您打开任何android应用程序时,默认状况下都会出现一些黑屏,其顶部和应用程序的图标位于顶部,您可使用样式/主题来对其进行更改。 ide
首先,在values文件夹中建立一个style.xml并为其添加样式。 post
<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar"> <item name="android:windowBackground">@drawable/splash_screen</item> </style>
除了使用@android:style/Theme.DeviceDefault.Light.NoActionBar
您还可使用其余任何主题做为父主题。 动画
其次,在您的应用程序Manifest.xml中,将android:theme="@style/splashScreenTheme"
到您的主要活动中。 this
<activity android:name="MainActivity" android:label="@string/app_name" android:theme="@style/splashScreenTheme" >
第三,在onCreate()启动活动中更新主题。 google
protected void onCreate(Bundle savedInstanceState) { // Make sure this is before calling super.onCreate setTheme(R.style.mainAppTheme); super.onCreate(savedInstanceState); }
更新查看这篇文章https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd感谢@ mat1h和@adelriosantiago 编码
默认状况下,Splash Screnn不会自动使您的应用程序看起来更专业。 专业设计的启动画面可使您的应用程序看起来更加专业,可是若是您不知道如何编写,则其他应用程序实际上将有多专业。 spa
拥有启动画面的惟一缘由(借口)是由于您正在执行大量计算或正在等待GPS / WiFi启动,由于您的应用程序依赖于启动以前。 若是没有这些计算的结果或没法使用GPS / WiFi(等等),您的应用程序就会死在水中,所以您会以为您须要启动屏幕,而且必须阻止任何其余正在运行的程序(包括背景程序)的屏幕视图)。
这样的启动画面应看起来像您的全屏应用程序,以给人以它已被初始化的印象,而后在完成冗长的计算以后,能够填充最终的详细信息(对图像进行调整)。 是这样的状况或这是程序设计的惟一方式的可能性 很小 。
最好容许用户(以及操做系统的其他部分)在等待时执行其余操做,而不是将程序设计为依赖会花费一些时间(等待时间不肯定)的程序。
手机上已经有图标表示GPS / WiFi正在启动。 初始屏幕占用的时间或空间可用于加载预计算或实际执行计算。 有关您建立的问题以及必须考虑的问题,请参见下面的第一个连接。
若是您绝对必须等待这些计算或GPS / WiFi,则最好只是让应用程序启动并弹出一个弹出框,指出必须等待这些计算(TEXTUAL“正在初始化”消息是能够的)。 可能须要等待GPS / WiFi(若是还没有在其余程序中启用它们),所以无需宣布其等待时间。
请记住,启动屏幕启动时,程序实际上已经在运行,您所要作的就是延迟使用程序,并拖延CPU / GPU来执行大多数没必要要的操做。
每次启动程序时,咱们最好真的要等待并看到您的启动画面,不然咱们不会以为它写的很专业。 使“启动画面”为“全屏”并与实际程序的画面重复(所以咱们认为实际上它还没有初始化)可能会实现您的目标(使您的程序看上去更专业),但我对此不会打赌。
为何不这样作: http : //cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/
怎么作: https : //encrypted.google.com/search?q = Android + splash + screen + source
所以,有充分的理由不这样作,可是若是您肯定本身的状况超出了这些示例的范围,则上面提供了执行此操做的方法。 确保它确实使您的应用程序看起来更专业,或者您已经击败了这样作的惟一理由。
就像YouTube频道同样,每一个视频都以冗长的图形简介(和Outro)开头,或者感受有必要讲个笑话或说明过去一周(不是喜剧或生活风格频道)发生了什么。 只是显示节目! (只需运行该程序)。
启动画面示例:
public class MainActivity extends Activity { private ImageView splashImageView; boolean splashloading = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); splashImageView = new ImageView(this); splashImageView.setScaleType(ScaleType.FIT_XY); splashImageView.setImageResource(R.drawable.ic_launcher); setContentView(splashImageView); splashloading = true; Handler h = new Handler(); h.postDelayed(new Runnable() { public void run() { splashloading = false; setContentView(R.layout.activity_main); } }, 3000); } }
上面的答案很好,但我想补充一下。 我是Android新手,在开发过程当中遇到了这些问题。 但愿这能够帮助像我这样的人。
闪屏是我应用程序的入口,所以在AndroidManifest.xml中添加如下几行。
<activity android:name=".SplashActivity" android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
初始屏幕在应用程序生命周期中仅应显示一次,我使用布尔变量记录初始屏幕的状态,而且仅在第一次显示。
public class SplashActivity extends Activity { private static boolean splashLoaded = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!splashLoaded) { setContentView(R.layout.activity_splash); int secondsDelayed = 1; new Handler().postDelayed(new Runnable() { public void run() { startActivity(new Intent(SplashActivity.this, MainActivity.class)); finish(); } }, secondsDelayed * 500); splashLoaded = true; } else { Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class); goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(goToMainActivity); finish(); } } }
祝您编码愉快!