2016-08-03 7 views
0

Ich möchte einen Splash-Screen eines Tagesbildes anzeigen, wenn es zwischen bestimmten Zeiten ist, und dann ein Nachtbild, wenn es nicht zwischen diesen Zeiten ist. Zuerst frage ich mich, ob das überhaupt möglich ist. Ich benutze Xamarin Forms für dieses Projekt, aber sogar der Code für iOS oder Android würde helfen. Für Android zeigt der Code, den ich gerade habe, nur einen Begrüßungsbildschirm an. Ich bin mir nur nicht sicher, ob es diese Veränderung überhaupt gibt.Je nach Bedingungen unterschiedliche Splash-Screens anzeigen

Styles.axml

<style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
</style> 

MainActivity.cs

[Activity(Theme = "@style/Theme.Splash", //Indicates the theme to use for this activity 
     MainLauncher = true, //Set it as boot activity 
     NoHistory = true)] //Doesn't place it in back stack 
public class SplashActivity : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     System.Threading.Thread.Sleep(3000); //Let's wait awhile... 
     this.StartActivity(typeof(MainActivity)); 
    } 
} 
+0

Es ist zumindest in iOS nicht möglich. Sie können einen "Fake Splash" View-Controller erstellen, der direkt nach dem Startbildschirm angezeigt wird, aber nicht sicher ist, ob Sie das möchten. –

Antwort

0

Wenn jemand interessiert ist, oder hat dieses Problem in der Zukunft, ist das, was ich in Android am Ende tun (nicht sah bei iOS noch). Ich denke, es ist so nah an 2 verschiedenen Splashs Screens, die auf Zeiten basieren, die ich bekommen kann. Es ist zunächst ein schwarzer Bildschirm lädt, dann auf der Tageszeit basieren, lädt er entweder den Tag oder Nacht Bild:

In styles.xml

<style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/splash</item> <!--Daytime--> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="Theme.Splash2" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/splash2</item> <!--Nighttime--> 
    <item name="android:windowNoTitle">true</item> 
</style> 

<style name="Theme.Splash3" parent="android:Theme"> 
    <item name="android:windowBackground">@drawable/splash3</item> <!--All black--> 
    <item name="android:windowNoTitle">true</item> 
</style> 

In MainActivity.cs

[Activity(Theme = "@style/Theme.Splash3", MainLauncher = true, NoHistory = true)] 
public class SplashActivity3 : Activity 
{ 
    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 

     System.Threading.Thread.Sleep(1); 

     if ((System.DateTime.Now.Hour >= 6) && (System.DateTime.Now.Hour <= 18)) 
     { 
      StartActivity(typeof(SplashActivity1)); 
     } 

     else 
     { 
      StartActivity(typeof(SplashActivity2)); 

     } 
    } 


    [Activity(Theme = "@style/Theme.Splash", NoHistory = true)] 
    public class SplashActivity1 : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      Timer timer = new Timer(); 
      timer.Interval = 3000; // 3 sec. 
      timer.AutoReset = false; // Do not reset the timer after it's elapsed 
      timer.Elapsed += (object sender, ElapsedEventArgs e) => 
      { 
       StartActivity(typeof(MainActivity)); 
      }; 
      timer.Start(); 


     } 
    } 

    [Activity(Theme = "@style/Theme.Splash2", NoHistory = true)] 
    public class SplashActivity2 : Activity 
    { 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
      Timer timer = new Timer(); 
      timer.Interval = 3000; // 3 sec. 
      timer.AutoReset = false; // Do not reset the timer after it's elapsed 
      timer.Elapsed += (object sender, ElapsedEventArgs e) => 
      { 
       StartActivity(typeof(MainActivity)); 
      }; 
      timer.Start(); 

     } 
    } 
+0

Sie sollten keinen 'Timer' in Ihren [Startbildschirmen] verwenden (http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/)! Eigentlich solltest du [gar keine Timer benutzen] (http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/) ... Du sollte nicht einmal einen Begrüßungsbildschirm verwenden, wenn Ihre App [nicht benötigt] (https://developer.android.com/design/patterns/help.html). – Bryan

+0

Danke für die Eingabe. Ich habe versucht mit System.Threading.Thread.Sleep, aber ich konnte nicht funktionieren. Dies ist das erste Mal, dass ich mit der mobilen Entwicklung arbeite, also ist vieles, was ich gemacht habe, nur von Online-Tutorials. Ich widerspreche nicht der Verwendung von Splash-Screens, wenn nicht benötigt, und habe es viel gelesen während der Suche nach dieser Antwort, aber es ist eine Voraussetzung für dieses Projekt, also muss ich es tun – Jason

+0

Anfänglich hatte nicht erkannt, dass Sie Xamarin verwenden, das ist mein Fehler. Die Xamarin 'Timer'-Klasse unterscheidet sich von der Java 'Timer'-Klasse. Aber ich denke, Sie haben meinen Punkt darüber verpasst, warum Sie keine Startbildschirme verwenden sollten. Selbst wenn das Projekt einen Startbildschirm erfordert, würde ich hoffen, dass es nicht für 3 Sekunden angezeigt werden muss. Ein Begrüßungsbildschirm sollte nur so lange angezeigt werden, wie die Anwendung zum Laden benötigt wird. – Bryan

1

Erstens möchte ich Sie dringend dazu auffordern, this tutorial zu folgen, um Splash-Screens korrekt zu erstellen. Ich weiß nicht, wie gut das für Xamarin wäre (da ich nicht mit der Plattform gearbeitet habe), aber es sollten die gleichen Konzepte gelten.


Von der Antwort, die Sie geschrieben, es sieht aus wie Sie gerade versuchen, den Splash-Screen auf der Grundlage zu ändern, ob es Tag oder Nacht ist. Dies kann einfach mit night oder notnightresource qualifiers erfolgen.

Wenn Sie beispielsweise einen Zeichensatz für Ihren Begrüßungsbildschirm verwenden, können Sie einen Ordner drawable-night erstellen. Platzieren Sie dann den Ordner für den Begrüßungsbildschirm im Ordner drawable und einen Zeichensatz für den Begrüßungsbildschirm im Ordner drawable-night (stellen Sie sicher, dass beide Zeichen denselben Namen haben).