Giriş Ekranı

Android uygulamasının başlatılması, özellikle de bir cihazda ilk kez başlatıldığında biraz zaman alır. Giriş ekranı, kullanıcıya veya markayı belirtmek için başlatma ilerleme durumunu görüntüleyebilir.

Genel bakış

Android uygulamasının başlatılması biraz zaman alır, özellikle de uygulama bir cihazda ilk kez çalıştırıldığında (bazen buna soğuk başlangıç denir). Giriş ekranı kullanıcıya başlangıç ilerleme durumunu veya uygulamayı tanımlamak ve tanıtmak için marka bilgilerini görüntüleyebilir.

Bu kılavuzda, Android uygulamasında giriş ekranı uygulama tekniği açıklanmaktadır. Aşağıdaki adımları kapsar:

  1. Giriş ekranı için çizilebilir bir kaynak oluşturma.

  2. Çizilebilir kaynağı görüntüleyecek yeni bir tema tanımlama.

  3. Önceki adımda oluşturulan tema tarafından tanımlanan giriş ekranı olarak kullanılacak uygulamaya yeni bir Etkinlik ekleme.

Örnek Xamarin logo giriş ekranı ve ardından uygulama ekranı

Gereksinimler

Bu kılavuz, uygulamanın Android API düzeyi 21 veya üzerini hedeflediğini varsayar. Uygulamada ayrıca projeye eklenen Xamarin.Android.Support.v4 ve Xamarin.Android.Support.v7.AppCompat NuGet paketleri de olmalıdır.

Giriş ekranı uygulama

Giriş ekranını işlemenin ve görüntülemenin en hızlı yolu, özel bir tema oluşturmak ve bunu giriş ekranını gösteren bir Etkinliğe uygulamaktır. Etkinlik işlendiğinde, temayı yükler ve çizilebilir kaynağı (tema tarafından başvurulur) etkinliğin arka planına uygular. Bu yaklaşım, düzen dosyası oluşturma gereksinimini önler.

Giriş ekranı, markalı çizilebilir öğeyi görüntüleyen, tüm başlatmaları gerçekleştiren ve tüm görevleri başlatan bir Etkinlik olarak uygulanır. Uygulama önyüklendikten sonra giriş ekranı Etkinliği ana Etkinliği başlatır ve kendisini uygulama geri yığınından kaldırır.

Giriş Ekranı için Çizilebilir Oluşturma

Giriş ekranında, giriş ekranı Etkinliği'nin arka planında çizilebilir bir XML görüntülenir. Görüntünün görüntülenmesi için bit eşlemli görüntü (PNG veya JPG gibi) kullanılması gerekir.

Örnek uygulama, splash_screen.xml adlı bir çizilebilir tanımlar. Bu çizilebilir, aşağıdaki xml'de gösterildiği gibi uygulamadaki giriş ekranı görüntüsünü ortalamak için Katman Listesi kullanır:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <color android:color="@color/splash_background"/>
  </item>
  <item>
    <bitmap
        android:src="@drawable/splash_logo"
        android:tileMode="disabled"
        android:gravity="center"/>
  </item>
</layer-list>

Bu layer-list , giriş görüntüsünü kaynak tarafından belirtilen bir arka plan rengine göre ortalar @color/splash_background . Örnek uygulama bu rengi Kaynaklar/değerler/colors.xml dosyasında tanımlar:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  ...
  <color name="splash_background">#FFFFFF</color>
</resources>

Nesneler hakkında Drawable daha fazla bilgi için Android Drawable'da Google belgelerine bakın.

Tema Uygulama

Giriş ekranı Etkinliği için özel bir tema oluşturmak için dosya değerlerini/styles.xml düzenleyin (veya ekleyin) ve giriş ekranı için yeni style bir öğe oluşturun. Aşağıda MyTheme.Splash adlı bir örnek değerler/style.xml dosyası gösterilmiştir:style

<resources>
  <style name="MyTheme.Base" parent="Theme.AppCompat.Light">
  </style>

  <style name="MyTheme" parent="MyTheme.Base">
  </style>

  <style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>  
    <item name="android:windowFullscreen">true</item>  
    <item name="android:windowContentOverlay">@null</item>  
    <item name="android:windowActionBar">true</item>  
  </style>
</resources>

MyTheme.Splash çok spartan bir özelliktir; pencere arka planını bildirir, başlık çubuğunu pencereden açıkça kaldırır ve tam ekran olduğunu bildirir. Etkinlik ilk düzeni şişirmeden önce uygulamanızın kullanıcı arabirimini öykünen bir giriş ekranı oluşturmak istiyorsanız, stil tanımınızda değilwindowBackground, kullanabilirsinizwindowContentOverlay. Bu durumda, çizilebilir splash_screen.xml kullanıcı arabiriminizin öykünmesini görüntüleyebilecek şekilde de değiştirmeniz gerekir.

Giriş Etkinliği Oluşturma

Şimdi başlangıç resmimizi içeren ve başlangıç görevlerini gerçekleştiren yeni bir Android etkinliğine ihtiyacımız var. Aşağıdaki kod, tam bir giriş ekranı uygulaması örneğidir:

[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
    static readonly string TAG = "X:" + typeof(SplashActivity).Name;

    public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
    {
        base.OnCreate(savedInstanceState, persistentState);
        Log.Debug(TAG, "SplashActivity.OnCreate");
    }

    // Launches the startup task
    protected override void OnResume()
    {
        base.OnResume();
        Task startupWork = new Task(() => { SimulateStartup(); });
        startupWork.Start();
    }

    // Simulates background work that happens behind the splash screen
    async void SimulateStartup ()
    {
        Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
        await Task.Delay (8000); // Simulate a bit of startup work.
        Log.Debug(TAG, "Startup work is finished - starting MainActivity.");
        StartActivity(new Intent(Application.Context, typeof (MainActivity)));
    }
}

SplashActivity açıkça uygulamanın varsayılan temasını geçersiz kılarak önceki bölümde oluşturulan temayı kullanır. Tema arka plan olarak çizilebilir olarak bildirdiği için içinde OnCreate bir düzen yüklemeniz gerekmez.

Etkinliğin NoHistory=true arka yığından kaldırılması için özniteliğinin ayarlanması önemlidir. Geri düğmesinin başlangıç işlemini iptal etmesini önlemek için, geçersiz kılabilir OnBackPressed ve hiçbir şey yapmamasını sağlayabilirsiniz:

public override void OnBackPressed() { }

Başlangıç işi içinde OnResumezaman uyumsuz olarak gerçekleştirilir. Başlangıç işinin yavaşlamayacak veya başlatma ekranının görünümünü geciktirmemesi için bu gereklidir. Çalışma tamamlandığında başlatılır SplashActivityMainActivity ve kullanıcı uygulamayla etkileşime geçebilir.

Bu yeniSplashActivity, özniteliği trueolarak ayarlanarak MainLauncher uygulamanın başlatıcı etkinliği olarak ayarlanır. SplashActivity Artık başlatıcı etkinliği olduğundan, öğesini düzenlemeniz MainActivity.csve özniteliğini uygulamasından MainLauncherMainActivitykaldırmanız gerekir:

[Activity(Label = "@string/ApplicationName")]
public class MainActivity : AppCompatActivity
{
    // Code omitted for brevity
}

Yatay Mod

Önceki adımlarda uygulanan giriş ekranı hem dikey hem de yatay modda doğru şekilde görüntülenir. Ancak bazı durumlarda dikey ve yatay modlar için ayrı giriş ekranları olması gerekir (örneğin, sıçrama görüntüsü tam ekran ise).

Yatay moda giriş ekranı eklemek için aşağıdaki adımları kullanın:

  1. Kaynaklar/çizilebilir klasöründe, kullanmak istediğiniz giriş ekranı görüntüsünün yatay sürümünü ekleyin. Bu örnekte, splash_logo_land.png yukarıdaki örneklerde kullanılan logonun yatay sürümüdür (mavi yerine beyaz harf kullanır).

  2. Kaynaklar/çizilebilir klasöründe, daha önce tanımlanan çizilebilir dosyanın yatay bir sürümünü layer-list oluşturun (örneğin, splash_screen_land.xml). Bu dosyada bit eşlem yolunu giriş ekranı görüntüsünün yatay sürümüne ayarlayın. Aşağıdaki örnekte, splash_screen_land.xml splash_logo_land.png kullanır:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
      <item>
        <color android:color="@color/splash_background"/>
      </item>
      <item>
        <bitmap
            android:src="@drawable/splash_logo_land"
            android:tileMode="disabled"
            android:gravity="center"/>
      </item>
    </layer-list>
    
  3. Henüz yoksa Resources/values-land klasörünü oluşturun.

  4. colors.xml ve style.xml dosyalarını values-land'eekleyin (bunlar mevcut değerlerden/colors.xml ve değerlerden/style.xml dosyalardan kopyalanabilir ve değiştirilebilir).

  5. values-land/style.xml değerini, için windowBackgroundçizilebilir öğesinin yatay sürümünü kullanabilecek şekilde değiştirin. Bu örnekte splash_screen_land.xml kullanılır:

    <resources>
      <style name="MyTheme.Base" parent="Theme.AppCompat.Light">
      </style>
        <style name="MyTheme" parent="MyTheme.Base">
      </style>
      <style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen_land</item>
        <item name="android:windowNoTitle">true</item>  
        <item name="android:windowFullscreen">true</item>  
        <item name="android:windowContentOverlay">@null</item>  
        <item name="android:windowActionBar">true</item>  
      </style>
    </resources>
    
  6. Giriş ekranının yatay sürümü için kullanmak istediğiniz renkleri yapılandırmak için land/colors.xml değerlerini değiştirin. Bu örnekte, yatay mod için giriş arka plan rengi mavi olarak değiştirilir:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
      <color name="primary">#2196F3</color>
      <color name="primaryDark">#1976D2</color>
      <color name="accent">#FFC107</color>
      <color name="window_background">#F5F5F5</color>
      <color name="splash_background">#3498DB</color>
    </resources>
    
  7. Uygulamayı yeniden derleyin ve çalıştırın. Giriş ekranı görüntülenmeye devam ederken cihazı yatay moda döndürün. Giriş ekranı yatay sürüme dönüşür:

    Giriş ekranını yatay moda döndürme

Yatay mod giriş ekranının kullanılmasının her zaman sorunsuz bir deneyim sağlamadığını unutmayın. Varsayılan olarak, Android uygulamayı dikey modda başlatır ve cihaz zaten yatay modda olsa bile yatay moda geçirir. Sonuç olarak, cihaz yatay moddayken uygulama başlatılırsa, cihaz kısa bir süre dikey giriş ekranını sunar ve dikeyden yatay giriş ekranına döndürmeye animasyon ekler. Ne yazık ki, bu ilk dikeyden yataya geçiş, giriş Etkinliği'nin bayraklarında belirtildiğinde ScreenOrientation = Android.Content.PM.ScreenOrientation.Landscape bile gerçekleşir. Bu sınırlamayı geçici olarak düzeltmenin en iyi yolu, hem dikey hem de yatay modlarda doğru şekilde işlenen tek bir giriş ekranı görüntüsü oluşturmaktır.

Özet

Bu kılavuzda, Xamarin.Android uygulamasında giriş ekranı uygulamanın bir yolu açıklanmaktadır; örneğin, başlatma etkinliğine özel bir tema uygulama.