Giriş Ekranı

Örneği İndir Örneği indirme

Bir Android uygulamasının başlaması, özellikle de uygulama bir cihazda ilk kez başlatıldıklarında biraz zaman alır. Giriş ekranında kullanıcıya başlatma ilerleme durumu veya markayı göstermek için gösterebilirsiniz.

Genel Bakış

Bir Android uygulamasının başlaması, özellikle de uygulamanın bir cihazda ilk kez çalıştırıldıklarında (bazen bu bir soğuk başlatma olarak adlandırılır) biraz zaman alır. Giriş ekranı, kullanıcıya başlatma ilerlemesini veya uygulamayı tanımlamak ve tanıtmak için marka bilgilerini görüntülüyor olabilir.

Bu kılavuzda, bir Android uygulamasında giriş ekranı uygulamak için kullanılan tek bir teknik ele vemektedir. Aşağıdaki adımları kapsar:

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

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

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

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

Gereksinimler

Bu kılavuz, uygulamanın Android API düzeyi 21 veya daha yüksek bir sürümü hedeflemektedir. Uygulamanın ayrıca projeye eklenen Xamarin.Android.Support.v4 ve Xamarin.Android.Support.v7.AppCompat NuGet paketleri de olması gerekir.

Bu kılavuzda yer alan tüm kod ve XML, bu kılavuzun SplashScreen örnek projesinde bulunabilir.

Giriş ekranı uygulama

Giriş ekranı oluşturmanın ve görüntülemenin en hızlı yolu özel bir tema oluşturmak ve bunu giriş ekranı sergileyen bir Etkinlik'e uygulamaktır. Etkinlik işlenirken temayı yükler ve çizilebilir kaynağı (tema tarafından başvurulan) etkinliğin arka planına uygular. Bu yaklaşım, düzen dosyası oluşturma ihtiyacının önüne geçmektedir.

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

Giriş Ekranı için Drawable 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ülensi için bit eşlemli görüntü (PNG veya JPG gibi) kullanmak gerekir.

Örnek uygulama, splash_screen.xml. Bu drawable, aşağıdaki xml'de gösterildiği gibi uygulamanın giriş ekranı görüntüsünü ortalarken 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 arka plan rengine göre @color/splash_background belirler. Örnek uygulama bu rengi Resources/values/colors.xml tanımlar:

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

Nesneler hakkında daha fazla Drawable bilgi için Drawable

Tema Uygulama

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

<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 basit bir işlemdir; pencere arka planını bildirer, başlık çubuğunu pencereden açıkça kaldırır ve tam ekran olduğunu bildirer. Etkinlik ilk düzeni şişirmeden önce uygulama arabirimine öykünen bir giriş ekranı oluşturmak için stil tanımınızı kullanmak yerine windowContentOverlaywindowBackground kullanabilirsiniz. Bu durumda, kullanıcı arabiriminizin öykünmesplash_screen.xml şekilde çizime değiştirilebilir.

Giriş Etkinliği Oluşturma

Şimdi, karşılama görüntümuz olan ve başlangıç görevlerini gerçekleştiren yeni bir Android etkinliği başlatmamız gerekiyor. Aşağıdaki kod, tam giriş ekranı uygulamasına bir örnektir:

[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 uygulamanın varsayılan temasını geçersiz karak, önceki bölümde oluşturulan temayı açıkça kullanır. Tema arka plan olarak çizilebilir OnCreate olarak bildirebilir olarak içinde bir düzen yüklemeye gerek yoktur.

Etkinliğin arka NoHistory=true yığından kaldırılması için özniteliğini ayarlamak önemlidir. Geri düğmesinin başlatma işlemini iptal etmelerini önlemek için, geçersiz kılarak hiçbir OnBackPressed şey yapmaması için de geçersiz kılabilirsiniz:

public override void OnBackPressed() { }

Başlangıç işi içinde zaman uyumsuz olarak OnResume gerçekleştirilir. Başlatmanın yavaşlaması veya başlatma ekranı görünümünü geciktirmemek için bu gereklidir. Çalışma tamamlandığında, SplashActivity başlar ve kullanıcı MainActivity uygulamayla etkileşime başlayabilir.

Bu SplashActivity yeni, özniteliği olarak ayar tarafından uygulama için başlatıcı etkinliği MainLauncher olarak true ayarlanır. Artık SplashActivity başlatıcı etkinliği olduğundan, düzenlemeniz ve MainActivity.cs özniteliğini 'den MainLauncher kaldırmanız MainActivity 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ı (örneğin, karşılama görüntüsü tam ekran ise) gereklidir.

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

  1. Kaynaklar/drawable klasörüne, 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ılır).

  2. Kaynaklar/drawable klasöründe, daha önce tanımlanan drawable'ın bir yatay sürümünü 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 şu splash_logo_land.png:

    <?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.xmlve style.xmldosyaları values-land'e ekleyin (bunlar mevcut değerler/colors.xmlve değerler/style.xmldosyalarından kopyalanır ve değiştirilebilir).

  5. values-land/style.xml için drawable'ın yatay sürümünü kullanması için değiştirme. 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ında yatay colors.xmliçin kullanmak istediğiniz renkleri yapılandırmak üzere values-land/colors.xml/colors.xml değiştirme. 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 derleme ve çalıştırma. Giriş ekranı görüntülenmeye devam ederken cihazı yatay moda döndürün. Giriş ekranı yatay sürüme değişir:

    Giriş ekranı yatay moda döndürme

Yatay mod giriş ekranı kullanımı her zaman sorunsuz bir deneyim sağlamaz. Varsayılan olarak, Android uygulamayı dikey modda başlatıyor ve cihaz zaten yatay modda olsa bile yatay moda geçişler. Sonuç olarak, cihaz yatay moddayken uygulama başlatıldı ise, cihaz dikey giriş ekranı kısaca gösterir ve dikey giriş ekranından yatay giriş ekranına döndürmeye animasyonlar verir. Ne yazık ki bu ilk dikeyden yataya geçiş, giriş Etkinliğinin ScreenOrientation = Android.Content.PM.ScreenOrientation.Landscape bayraklarında belirtiliyor olsa bile uzıyor. Bu sınırlamayı düzeltmenin en iyi yolu, dikey ve yatay modlarda doğru şekilde işilen tek bir giriş ekranı görüntüsü oluşturmaktır.

Özet

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