2015-09-02 1 views
0

Je tente de créer un thème aperçu "splash screen" comme par:XML d'image Drawable place 1/4 de haut

-à-dire un thème qui place un Dessinable en XML en arrière-plan, qui s'affiche ensuite pendant que Android charge la première mise en page de l'activité.

J'ai utilisé ces techniques sur des mises en page de base pendant des années, tout le temps en supposant qu'il n'y avait pas de solution pour les mises en page plus complexes, comme cette question. Aujourd'hui, j'ai décidé de remettre en question l'hypothèse.


Il est facile de superposer une image sur l'autre, et de centrer la plus petite image en utilisant un LayerDrawable:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <bitmap 
      android:src="@drawable/background" /> 
    </item> 
    <item> 
     <bitmap 
      android:gravity="center" 
      android:src="@drawable/logo" /> 
    </item> 
</layer-list> 

Ce que je veux faire est placer le logo exactement 1/4 de la hauteur de l'écran vers le bas à partir du haut.

Existe-t-il une solution à cela, qui peut être utilisée dans un fichier XML dessinable?


mise à jour basée sur comment by DavidH - Peut-on ajouter une sous-classe personnalisée LayerDrawable dans un fichier XML étirables, qui est ensuite utilisé dans le cadre d'un thème d'application?

+0

Il est préférable d'utiliser une mise en page pour cela. – DavidH

+0

De bonnes lectures en effet. Désolé de n'avoir rien de mieux à offrir, mais je pense que vous devrez écrire une classe LayerDrawable personnalisée et remplacer l'onDraw() où vous faites: canvas.save()> canvas.translate()> logoDrawable.draw (canvas) > canvas.restore(). – DavidH

+0

Malheureusement, pour autant que je sache, ce n'est pas possible. Vous pouvez envisager d'utiliser 'getWindow(). SetBackgroundDrawable (new CustomSplashLayerDrawable());' au début de votre Activity 'onCreate()' – DavidH

Répondre

0

Ce n'est pas possible. Les mesures relatives dans les mises en page XML ne sont pas prises en charge.