27 votes

Disposition personnalisée Android

J'ai passé quelque temps hier aux prises avec android mises en page (... ou mieux des mises en page personnalisées). À des fins générales, les formes de la sortie de la boîte configurations que les androïdes, les offres sont plus que suffisant. Mais quand il s'agit de cas d'utilisation plus complexes (prenons l'exemple du carrousel avec chevauchement des images qui sont sur une trajectoire elliptique) je me suis vite rendu compte de la limitation et de la complexité de l'Api android. C'était mon approche:

  1. À l'aide de la boîte de mises en page n'est pas une option pour beaucoup de ingérable questions de la poignée) , toutefois, la nécessité d'objets graphiques qui peut être ajouté à un conteneur (disons ImageView par exemple) est nécessaire afin de réaliser facilement la traduction, rotations, etc... par le biais de l'animation.

  2. Le AbsoluteLayout semble la plus raisonnable de mise en page disponibles pour le but. Il vous permet d'ajouter dérivé de voir les objets et écrire votre propre algorithme pour les positionner. Mais... c'est déconseillé. C'est une honte! Qui veut utiliser l'api obsolète ?

  3. Les prochains la plupart de la chose raisonnable à faire est d'écrire votre propre mise en page sous-classement de la mystique ViewGroup.. et c'est là où le toutes choses tombent en morceaux (au moins il a fait pour moi). C'est compliqué, trompeuse et difficile à faire autant que c'est d'écrire votre propre mise en page personnalisée pour swing (j'ai en fait il ya des années, et je me souviens d'être plus simple).

  4. Ensuite (poussé par le désespoir) sous-classement d'une Vue, une substitution de la méthode onDraw et dessin directement sur une Toile semble la seule solution simple (bien que cela me rappelle les jours de java2D... les longues heures passées à atteindre le haut de 1% de votre projet), mais alors vous êtes à abandonner la pratique intégré dans l'animation des Api que vous souhaitez appliquer pour les graphiques dessinés sur la toile.

La conclusion est que, à moins que j'ai raté quelque chose, le courant android architecture est un peu loin du paradigme de programmation offerts par d'autres technologies d'INTERFACE utilisateur tels que flash ou javafx (je peux facilement mettre en œuvre décrits ci-dessus carrousel en javafx et flash). La raison en est que, en javafx par exemple, la Scène de l'objet (comparable à la Vue du concept d'android) propose par défaut d'une disposition absolue. Vous pouvez ensuite appliquer à d'autres de sortir de la boîte de mises en page si vous le souhaitez. Mais pour les scénarios où une mise en page personnalisée est nécessaire, vous n'avez pas à faire quoi que ce soit.

Je suis un peu surprise que cette option n'est pas disponible sous android, après tout, est un besoin commun qui est traitée par d'autres technologies d'interface utilisateur. J'ai tout de même pense qu'il y a un 5ème option dans android que je n'ai pas trouvé. Tout d'experts qui peuvent fournir des informations sur le sujet?

Merci.

3voto

uval Points 2127

Je pense que Android de Mise en page sont parfaits pour la plupart des cas d'utilisation pour l'interaction avec les utilisateurs, MAIS (un grand "Mais") le mécanisme de Mise en page est très délicate et il est difficile d'étendre correctement. Pour les petites tweeks c'est bien, mais si vous voulez faire quelque chose hors de l'ordinaire (comme un carrousel animé), vous n'avez probablement gratuit graphismes de toute façon, vous n'avez pas besoin de l'appoint de la complexité de l'extension de la Mise en page. C'est juste plus de contraintes à vivre avec, sans justifiable de la valeur ajoutée.

La plupart des applications ont quelques trucs standard (ActionBar, les boutons, les préférences, les dialogues, etc), et un ou plusieurs "uniques" éléments. Donc, ma suggestion est d'utiliser la mise en page standard pour la norme des choses, mais pour votre unique des éléments d'utiliser l'un de ces:

1) SurfaceView - très facile à utiliser. Voir l'officiel Lunar Lander exemple de code. Pour voir SurfaceView en action, vous pouvez aussi jeter un oeil à l'une de mes applications vidéo, qui utilise SurfaceView pour l'animation de l'élément, et tout est aménagé avec RelativeLayout.

2) opengl C'est le moyen le plus puissant pour faire des graphiques sur Android. Il fonctionne sur le GPU, donc le CPU peut être libre de faire d'autres choses. Et c'est en 3D (ou 2D, si vous utilisez seulement un avion). Je suis l'aide de libgdx, et c'est génial, et pas difficile après un court apprentissage.

Les deux SurfaceView et opengl (GLSurfaceView) sont des points de vue, de sorte qu'ils peuvent être ajoutés à une mise en page comme tout autre point de vue

1voto

Gu1234 Points 1768

1voto

trumpetlicks Points 5830

C'est une question FANTASTIQUE. Je suis de programmation pour la 3.0 et au-dessus actuellement, et ont décidé, pour la plupart, à coller avec AbsoluteLayouts dans de nombreux cas. Il est obsolète, la compilation pour la 3.0 ish et ci-dessous le plus probable sera toujours en mesure d'exécuter le 4 et au-delà des systèmes un peu. Im la recherche de cette réponse moi-même (pour les futures versions de l'OS qui le couper). La raison pour laquelle ils sont de coupe c'est qu'il n'y a pas de normalisation de la résolution de l'écran sur Android.

Ma suggestion serait d'utiliser AbsoluteLayouts AUSSI LONGTEMPS QUE NOUS le POUVONS. Je pense également que nous devrions commencer à pousser pour laisser Google sais que c'est encore un Très API nécessaires à leur plate-forme.

Bonne Question :-)

1voto

user1917051 Points 61

La documentation disponible sur les modèles personnalisés semble assez vague pour moi, mais j'ai enfin trouvé quelque chose d'utile: Voici un bel exemple simple de mise en page qui indique comment connecter XML et le code Java: Comment la mise en page d'une grille d'images dans le centre de l'écran Et voici un post qui explique une question clé qui me manquait: http://www.arpitonline.com/blog/2012/07/01/creating-custom-layouts-for-android/. Apparemment, l'un a remplacer onMeasure et appel de mesure() pour chaque enfant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X