程序化主题变更不起作用

时间:2017-05-15 08:35:32

标签: android xml android-theme

我的应用程序加载了一些数据以启动,需要几秒钟,所以我希望此时显示启动画面。

我所能看到的只是确保我在setTheme之前使用super.onCreate,但是当它加载MainActivity时,背景是启动画面,操作栏有闪光灯屏幕图像被压扁了。

这是我的styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 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:background">@drawable/background_portrait</item>
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:background">@drawable/splashscreen</item>
    </style>

在我的AndroidManifest.xml中,我有android:theme="@style/SplashTheme"

SplashScreen.java运行需要时间的所有代码,然后切换到我所在的MainActivity.java -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

我错过了什么?它似乎也是flashscreen背景的其他东西的背景,比如一些TextViews和动作栏?

感谢您提供的任何帮助。

编辑此外,启动画面xml中的代码无法运行。它只是加载背景并在完成时加载主要活动?

SplashScreen.java有 -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash_screen);

        Log.i("Splash Screen", "loading");

        mAdView = (AdView) findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

        // code that takes time

activity_splash_screen.xml是 -

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/splashscreen"
    tools:context="com.androidandyuk.bikersbestfriend.SplashScreen">

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_gravity="bottom|center_horizontal"
        android:layout_margin="32dp"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id"></com.google.android.gms.ads.AdView>

</FrameLayout>

1 个答案:

答案 0 :(得分:1)

不要在主题中使用android:background。任何没有背景的东西都会继承这个。

您打算设置android:windowBackground