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:
Giriş ekranı için çizilebilir bir kaynak oluşturma.
Çizilebilir kaynağı görüntüleyecek yeni bir tema tanımlama.
Önceki adımda oluşturulan tema tarafından tanımlanan giriş ekranı olarak kullanılacak uygulamaya yeni bir Etkinlik ekleme.
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 OnResume
zaman 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 SplashActivity
MainActivity
ve kullanıcı uygulamayla etkileşime geçebilir.
Bu yeniSplashActivity
, özniteliği true
olarak 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.cs
ve özniteliğini uygulamasından MainLauncher
MainActivity
kaldı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:
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).
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>
Henüz yoksa Resources/values-land klasörünü oluşturun.
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).
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>
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>
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:
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.