Цвет фона активности заставки
У меня проблема с моим заставкой на Android.
Всплывающий экран отображается пользователю во время длительного запуска приложения, но фон активности всегда черный. Я имею в виду фоновое растровое изображение (всплеск изображения), но фон черный, а не белый. Я использую PNG-изображение с прозрачностью.
Что у меня:
- Изображение с заставкой PNG с прозрачным фоном
- Активность заставки экрана
[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));
}
}
- Стиль темы для активности заставки в ресурсах/значениях/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>
- Брызги в ресурсах /drawable/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 -->
Проблема:
Как вы можете видеть, я использую Theme.Holo.Light как родительскую тему, и я использую ее в остальном приложении. Холо-свет использует белый фон.
Этот белый фон не применяется к фону SplashActivity.
Фон SplashActivity всегда черный.
Фоновый битмап (всплеск изображения) виден, но фон черный, а не белый. Я использую PNG-изображение с прозрачностью.
Вопрос:
Как установить цвет фона темы Holo.Light по умолчанию (белый) в активности SplashScreen?
Примечание:
Я использую Xamarin.Android, но стилизация распространена для платформы Android. Android версии 4 и выше.
Ответы
Ответ 1
В ресурсах /drawable/splash _centered.xml вместо растрового изображения используйте список слоев
<?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>
Ответ 2
Вот как я смог получить белый фон всплеск (с логотипом в центре) в Xamarin.
[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)));
}
}
с Theme.Splash как:
<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>
и splash.axml(Theme.Light.NoTitleBar) как:
<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: есть небольшая задержка в всплеске png (логотип), чтобы подняться, но ее все еще приемлемо, лучше, чем на черном фоне.