J'utilise le style suivant pour afficher un écran de démarrage pour une application Android écrite en MonoDroid. Cependant, il semble prendre l'image et l'agrandir pour l'adapter à tout l'écran tout en gâchant le rapport d'aspect) Ainsi, l'image semble énorme et horrible.
Existe-t-il un moyen de l'optimiser, mais de conserver le rapport hauteur/largeur de sorte qu'il semble toujours bon?
<style name="Theme.Splash" parent="Android:Theme">
<item name="Android:windowBackground">@drawable/splashscreenimage</item>
<item name="Android:windowNoTitle">true</item>
</style>
C'est l'activité en C # qui crée l'écran de démarrage et va à la connexion.
[Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)]
public class SplashScreenActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Start our real activity
StartActivity(typeof(LoginActivity));
}
}
Il existe plusieurs types de drawables dans Android, y compris les bitmaps réels, les fichiers à neuf patchs et les fichiers XML. Essayez d'encapsuler votre fichier image avec un fichier XML qui lui donne des attributs, puis utilisez le fichier XML comme dessinable au lieu de l'image source.
Supposons que votre fichier xml s'appelle scaled_background et que votre image d'origine soit simplement background.png:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:gravity="center"
Android:src="@drawable/background" />
Au lieu de définir votre arrière-plan comme référence @drawable/background
vous le définiriez pour référencer le fichier XML: @drawable/scaled_background
dans cet exemple. Les détails sur les modes de mise à l'échelle sont mentionnés dans la Documentation Drawable .
Il semble prendre l'image et l'agrandir pour l'adapter à tout l'écran tout en gâchant le rapport d'aspect. Ainsi, l'image semble énorme et horrible.
Existe-t-il un moyen de l'optimiser, mais de conserver le rapport hauteur/largeur de sorte qu'il semble toujours bon?
La raison pour laquelle l'image est agrandie est que l'image que vous utilisez a des pixels plus élevés que la résolution de l'écran de l'appareil dans lequel vous testez l'application. Pour résoudre ce problème , la meilleure méthode consiste à créer des images de taille appropriée (pixels) pour écran de périphérique différent , puis à les placer dans fichiers drawable (drawable-ldpi, drawable-mdpi, drawable-hdpi, etc.) en conséquence.
Voici une liste de taille d'écran minimale pour divers affichages fournis par Google (tous en pixels): -
Pour Appareils mobiles Android
LDPI- 426 x 320
MDPI- 470 x 320
HDPI - 640 x 480
XHDPI- 960 x 720
Pour les tablettes Android
LDPI- 200 x 320
MDPI - 320 x 480
HDPI - 480 x 800
XHDPI- 720 x 1280
Créez maintenant un dessinable XML dans res/drawable qui fournira l'arrière-plan de l'activité de démarrage dans le thème (Theme.Splash) en utilisant layer-list
. L'image est chargée dans <bitmap>
et est au centre aligné à l'aide de l'attribut gravity.
<!-- background_splash.xml -->
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:drawable="@color/gray"/>
<item>
<bitmap
Android:gravity="center"
Android:src="@drawable/splashscreenimage"/>
</item>
</layer-list>
Modifiez maintenant votre style (Theme.Splash) et définissez background_splash.xml comme background de votre activité de démarrage dans le thème.
<style name="Theme.Splash" parent="Android:Theme">
<item name="Android:windowBackground">@drawable/background_splash.xml</item>
<item name="Android:windowNoTitle">true</item>
</style>
Avec cela, l'image doit être réglée au centre avec un rapport d'aspect maintenu.
Remarque: Pour le redimensionnement d'image, vous pouvez utiliser Adobe Photoshop (je trouve plus facile de travailler avec). Un peu d'expérimentation devra être fait pour obtenir la taille d'image correcte que vous souhaitez pour l'écran de démarrage.
Selon vos préférences, vous pouvez également utiliser 9 Patch image afin que la bordure de l'image puisse s'étirer pour s'adapter à la taille de l'écran sans affecter la zone statique du image.
Liens de référence:
Building Splash Screen:https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd
Tailles d'image de l'écran de démarrage:Tailles de l'écran de démarrage Android pour les affichages ldpi, mdpi, hdpi, xhdpi? - par exemple: 1024X768 pixels pour ldpi