我正在尝试将闪屏添加到我的Android应用中。
我一直在遵循here的指示。这是我得到的标准方法,似乎很合逻辑。
这真的很简单吧?创建可绘制资源,在主题中将其用作windowBackground,使用主题?好吧,这对我不起作用...
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="euroicc.sicc">
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.Splashscreen">
<activity android:name="euroicc.sicc.ui.MainActivity"
android:theme="@style/AppTheme.Splashscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
样式:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
<item name="android:itemBackground">@color/main_background</item>
<item name="android:textColor">@color/text_default</item>
<!--<item name="android:popupMenuStyle">@style/MyAlertDialog</item>-->
</style>
<style name="AppTheme.Splashscreen" parent="AppTheme">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowBackground">@drawable/splashscreen_drawable</item>
</style>
</resources>
splashscreen_drawable:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/holo_green_light"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/splashschreen_eicc"
android:gravity="center"></bitmap>
</item>
</layer-list>
我尝试了其他站点的其他代码,但是似乎没有任何效果。
仅显示白色背景不到一秒钟(大约),然后该应用程序开始运行。我在主要活动的onCreate方法中设置主题AppTheme,因此除开始时,它始终使用默认主题。
我也重写了onPause和onResume,但是我称它们为super,所以这应该不是问题。
我正在测试v7.0.0,但这也不应该成为问题吗?
我有更多样式,但是我将它们从示例代码中删除了,因为它们用于xml文件中的对话框和元素,而不用于活动。
那么问题是什么,我该如何解决?当我第一次阅读启动画面时,我认为设置windowBackground就足够了
答案 0 :(得分:0)
您没有在styles.xml中设置背景,而是在splashcreen布局xml文件中设置了背景。这是我的布局示例:
<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription"
android:background="@drawable/green" ==============================> HERE!
tools:context=".activity_splash_screen">
<ImageView
android:id="@+id/logo"
android:layout_width="@dimen/_150sdp"
android:layout_height="@dimen/_150sdp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/_100sdp"
android:src="@drawable/white_logo"
/>
<ImageView
android:id="@+id/title"
android:layout_width="@dimen/_240sdp"
android:layout_height="@dimen/_150sdp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/_100sdp"
android:src="@drawable/title"
/>
如果您需要整个代码方面的帮助,我可以为您提供帮助!
答案 1 :(得分:0)
我遇到了这个问题。我将启动屏幕创建为可绘制的层列表,主题创建为windowBackground,在任何地方都建议使用它,但是它在某些设备(例如我和我朋友的Motorolas以及其他一些电话)上无法使用-黑屏将显示。对我来说,解决方案是将我的启动活动代码包装到Handler的postDelayed可运行程序中,并稍作延迟:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Handler(Looper.getMainLooper()).postDelayed( { //this is a trick so the splash screen - in window bg theme - is displayed on all devices, instead of black screen. E.g. moto g6
val startMainActivityIntent = ...
startActivity(startMainActivityIntent)
finish()
}, 100)
}
我并不特别喜欢延迟UI,如果我知道一种更好的工作方式,我就不会这样做。但这比黑屏好。