Android window主题中的背景不起作用-Splashscreen

时间:2018-07-20 13:10:31

标签: android user-interface splash-screen

我正在尝试将闪屏添加到我的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就足够了

2 个答案:

答案 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,如果我知道一种更好的工作方式,我就不会这样做。但这比黑屏好。