studio - manual de java para android
Color de fondo de la actividad de la pantalla de bienvenida (3)
Tengo problemas con mi pantalla de inicio en Android. La pantalla de bienvenida se muestra al usuario durante un inicio prolongado de la aplicación, pero el fondo de actividad siempre es negro. Quiero decir que el mapa de bits de fondo (imagen de bienvenida) es visible, pero el fondo es negro en lugar de blanco. Estoy usando imagen PNG con transparencia.
Lo que tengo:
- Imagen de pantalla de inicio de PNG con fondo transparente.
- Actividad de pantalla de bienvenida
[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));
}
}
- Estilo de tema para la actividad de la pantalla de bienvenida en resources / values / 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>
- Splash drawable in 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 -->
Problema: Como puede ver, estoy usando Theme.Holo.Light como tema principal y lo estoy usando en el resto de mi aplicación. Holo luz está utilizando fondo blanco. Este fondo blanco no se aplica en el fondo SplashActivity. El fondo de SplashActivity es siempre negro. El mapa de bits de fondo (imagen de bienvenida) es visible, pero el fondo es negro en lugar de blanco. Estoy usando imagen PNG con transparencia.
Pregunta: ¿Cómo establecer el color de fondo del tema Holo.Light predeterminado (blanco) en la actividad de SplashScreen?
Nota: estoy usando Xamarin.Android, pero el estilo es común para la plataforma Android. Android versión 4 y superior.
Así es como pude obtener salpicaduras de fondo blanco (centrado en el logotipo) en 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)));
}
}
con Theme.Splash como:
<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>
y el código splash.axml (Theme.Light.NoTitleBar) como:
<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: Hay un ligero retraso en la aparición de png (logotipo), pero sigue siendo aceptable, mejor que el fondo negro.
En resources / drawable / splash_centered.xml, en lugar del mapa de bits, use una lista de capas
<?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>
establece android: drawable = "@ color / colorWhite" en el elemento.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorWhite" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/splash" />
</item>
</layer-list>