2014-10-02 27 views
11

Ich habe ein Problem mit meinem Splash-Screen auf Android. Der Begrüßungsbildschirm wird dem Benutzer während eines langen Anwendungsstarts angezeigt, der Aktivitätshintergrund ist jedoch immer schwarz. Ich meine, Hintergrund-Bitmap (Splash-Bild) ist sichtbar, aber der Hintergrund ist schwarz statt weiß. Ich verwende PNG-Bild mit Transparenz.Splash-Screen-Aktivität Hintergrundfarbe

Was ich habe:

  1. PNG Splash-Screen-Bild mit transparentem Hintergrund
  2. Splash Screen Aktivität
[Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)] 
    public class SplashScreen : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 

      // Do your app initialization here 
      // Other long running stuff 

      // Run app when done 
      StartActivity(typeof(MainForm)); 
     } 
    } 
  1. Theme Stil für Splash-Screen-Aktivität in Ressourcen/Werte/styles.xml
<resources> 
     <style name="Theme.Splash" parent="@android:style/Theme.Holo.Light"> 
     <item name="android:windowBackground">@drawable/splash_centered</item> 
     <item name="android:windowNoTitle">true</item> 
     </style> 
    </resources> 
  1. Splash ziehbar in resources/ziehbar/splash_centered.xml
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
     android:src="@drawable/splash" 
     android:gravity="center" 
     android:background="@color/white"> <!-- this is ignored --> 

Problem: Wie Sie sehen, ich bin mit Theme .Holo.Light als übergeordnetes Thema und ich benutze es im Rest meiner App. Holo-Licht benutzt weißen Hintergrund. Dieser weiße Hintergrund wird nicht auf den SplashActivity-Hintergrund angewendet. Der SplashActivity-Hintergrund ist immer schwarz. Hintergrund-Bitmap (Splash-Bild) ist sichtbar, aber der Hintergrund ist schwarz statt weiß. Ich verwende PNG-Bild mit Transparenz.

Frage: Wie Standard Holo.Light Thema Hintergrundfarbe (weiß) auf der SplashScreen-Aktivität?

Hinweis: Ich benutze Xamarin.Android, aber Styling ist für Android-Plattform üblich. Android Version 4 und höher.

+0

richte Sie Inhalt Ansicht in splash Ansicht? –

+0

Nein. Es ist nur mit Stilen möglich. Es gibt kein Layout. – Ludwo

+0

@Ludwo, hast du es funktioniert? –

Antwort

20

In resources/ziehbar/splash_centered.xml statt der Bitmap eine Schicht-Liste verwenden

<?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/white" /> 
    </shape> 
    </item> 
    <item> 
    <bitmap android:gravity="center" android:src="@drawable/splash" /> 
    </item> 
</layer-list> 
+0

funktioniert gut, eigentlich besser als Lösung mit benutzerdefinierten Aktivitäten als Thema zeigt Bild früher –

+0

Wohin geht das? –

+0

@IanWarburton in Ressourcen/Zeichen/splash_centered.xml. Original Frage Schritt 4, Layer-Liste anstelle der Bitmap. – minnow

8

Dies ist, wie ich in Xamarin weißen Hintergrund Spritzer (Logo zentriert) bekommen konnte.

[Activity (Theme= "@style/Theme.Splash", MainLauncher=true, NoHistory=true)]    
public class SplashActivity : Activity 
{ 
    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 
     SetContentView (Resource.Layout.splash); 
     ThreadPool.QueueUserWorkItem (o => LoadActivity()); 
     // Create your application here 
    } 
    private void LoadActivity() { 
     Thread.Sleep (1000); // Simulate a long pause 
     RunOnUiThread (() => StartActivity (typeof(MainActivity))); 
    } 
} 

mit Theme.Splash als:

<resources> 
    <style name="Theme.Splash" parent="@android:style/Theme.Light"> 
    <item name="android:colorBackground">@android:color/white</item> 
    <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 

und splash.axml Code (Theme.Light.NoTitleBar) als:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:minWidth="25px" 
    android:minHeight="25px" 
    android:gravity="center"> 
    <ImageView 
     android:src="@drawable/splash" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/imageView1" 
     android:layout_gravity="center" /> 
</LinearLayout> 

NB: Es gibt eine leichte Verzögerung bei der Splash Png (Logo) zu kommen, aber es ist immer noch akzeptabel, besser als der schwarze Hintergrund.

+0

Mein Hintergrund-Bitmap (Splash-Bild) ist sichtbar, aber die Hintergrundfarbe ist schwarz statt weiß. Das ist der Punkt. Ich verwende PNG-Bild mit Transparenz. Ich habe meine Frage aktualisiert, um klarer zu sein. – Ludwo

+0

Durch die obige Problemumgehung erhalten Sie einen weißen Hintergrund für Ihr transparentes Splash-Bild (in SplashActivity). – Shibbs

+0

Die einzige Lösung, die ich online gefunden habe, funktionierte. Vielen Dank. – phillipwei